2013-05-12 99 views
0

我有3个不同结构的表,它们共享相同的逻辑列:price。我想从所有3个表格的所有记录中找到最大的价格。我想尝试类似于:sql标准 - 在集合函数内部使用聚合函数

SELECT MAX(price) FROM (

SELECT MAX(price) FROM pc 
UNION 
SELECT MAX(price) FROM printer 
UNION 
SELECT MAX(price) FROM laptop 

); 

但我得到一个语法错误:Incorrect syntax near ';'.。什么是错的,它应该是什么样子?这应该与SQL标准兼容,而不是特定的RDBMS。

+0

您应该在内部查询中添加别名,例如“Max(price)as price”。试试这可能也是错误的原因。另外,您需要给别名 – ankurtr 2013-05-12 11:04:58

回答

3

你需要给别名子查询,

SELECT MAX(price) max_price 
FROM 
(
    SELECT price FROM pc 
    UNION ALL 
    SELECT price FROM printer 
    UNION ALL 
    SELECT price FROM laptop 
) subquery 

得到子查询内的最高价格是没有必要的。

+0

的子查询与'AS max_price'一样是'max_price'吗?最后一行中的“子查询”是什么? – ducin 2013-05-12 11:01:50

+0

'AS'是一个可选的关键字,因此它是相同的。 “子查询”是子查询的别名。只要它不是保留密钥,就可以将其更改为所需的任何内容。顺便问一下,你用什么数据库服务器? – 2013-05-12 11:03:22

+0

你是否尝试执行上面的查询? – 2013-05-12 11:06:09

2

试试这个sql。

SELECT MAX(price) FROM (

SELECT MAX(price) as price FROM pc 
UNION 
SELECT MAX(price) as price FROM printer 
UNION 
SELECT MAX(price) as price FROM laptop 

) t;