我的表是这样的:
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()
功能测试的简单版本,它可以工作。但是,当我使用HighestPrice
条件中的WHERE
时如下:
SELECT
MAX(Price) AS HighestPrice,
SupplierID
FROM Products
GROUP BY SupplierID
WHERE HighestPrice>20;
系统报告ERROR为:
错误:滥用聚合:MAX()
这是否意味着我必须使用内连接来获得我想要的东西?
答案 0 :(得分:1)
使用 代替where 在分组声明之前始终使用的位置。它是过滤我们已经可用的数据的方法,而在分组语句后使用它是因为它应用于我们正在制作的数据。
SELECT MAX(Price) AS HighestPrice, SupplierID
FROM Products
Group By SupplierID
having MAX(Price) > 20;
如有任何疑问,请与我联系。
答案 1 :(得分:1)
通过解释上面 G.arima 的答案:
使用GROUP BY
时,您可以有效地创建一个新的虚拟表,其中仅包含GROUP BY
字段和摘要。
有两个过滤条款,WHERE
和HAVING
,但它们具有不同的作用。
WHERE
过滤原始表格。这为您提供了公式FROM … WHERE …
HAVING
过滤群组。这为您提供了公式GROUP BY … HAVING …
你问的是好的,但条款是错误的。正如 G.arima 所说,您应该使用HAVING
。
答案 2 :(得分:1)
只是为了好玩。如果您特别想要使用最高价格的条件而不是具有最大功能的G.arima给出的条款。这样做: -
SELECT *
FROM
(
SELECT
MAX(Price) AS HighestPrice,
SupplierID
FROM Products
GROUP BY SupplierID
) a
WHERE HighestPrice>20;
希望它有所帮助: - )
答案 3 :(得分: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);