2017-04-23 55 views
0

我的表是這樣的:如果我想使用MAX()值作爲「where」條件,我必須使用內部連接嗎?

ProductID ProductName  SupplierID CategoryID Unit     Price 
1   Chais   1   1   10 boxes x 20 bags 18 
2   Chang   1   1   24 - 12 oz bottles 19 
3   Aniseed Syrup 1   2   12 - 550 ml bottles 10 
4   Chef Anton's 
      Cajun Seasoning 2   2   48 - 6 oz jars  21.35 
5   Chef Anton's 
      Gumbo Mix  2   2   36 boxes    25 

我複製它從https://www.w3schools.com/sql/sql_func_max.asp

我試圖MAX()功能測試的簡單版本,它的工作原理。但是,當我使用HighestPriceWHERE condtion如下:

SELECT 
    MAX(Price) AS HighestPrice, 
    SupplierID 
FROM Products 
GROUP BY SupplierID 
WHERE HighestPrice>20; 

該系統正報錯爲:

Error: misuse of aggregate: MAX()

這是否意味着我必須使用內連接來得到我想要的東西?

+0

是的,謝謝大家。我們需要使用具有子句的任何聚合函數的值條件。這是常識,我忘記了 –

回答

1

以下查詢應該工作:

SELECT SupplierID, MAX(Price) AS HighestPrice  
FROM Products 
GROUP BY SupplierID 
HAVING MAX(Price) > 20; 

下面是一個寫任何SQL查詢的正確語法:

SELECT column_name1, 
     SUM(column_name2) 
FROM table_name 
WHERE [CONDITION] 
GROUP BY column_name1 
HAVING (arithematic function condition); 
1

使用具有而不是在哪裏。
集團通過聲明前始終使用的地方。這是過濾我們已經可用的數據的方法,而在group by statement之後使用它是因爲它適用於我們正在製作的數據。

SELECT MAX(Price) AS HighestPrice, SupplierID 
FROM Products 
Group By SupplierID 
having MAX(Price) > 20;  

如有任何疑問,請通知我。

1

截至G.arima的回答上面的解釋道:

當您使用GROUP BY,將有效地創建僅包含GROUP BY領域及摘要一個新的虛擬表。

有兩個篩選子句,WHEREHAVING,但它們有不同的作用。

  • WHERE過濾原始表格。這給你的公式FROM … WHERE …
  • HAVING過濾組。這給你的公式GROUP BY … HAVING …

你問的是好的,但該條款是錯誤的。由於G.arima說,你應該使用HAVING

1

只是爲了好玩。如果您特別要使用條件以獲得最高價格,而不是使用G.arima給出的帶有最大功能的子句。做到這一點: -

SELECT * 
FROM 
(
SELECT 
    MAX(Price) AS HighestPrice, 
    SupplierID 
FROM Products 
GROUP BY SupplierID 
) a 
WHERE HighestPrice>20; 

希望它可以幫助:-)

相關問題