2013-05-12 210 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;