如果我想使用MAX()值作为"其中"我必须使用内连接条件?

时间:2017-04-23 04:45:11

标签: sql

我的表是这样的:

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()

这是否意味着我必须使用内连接来获得我想要的东西?

4 个答案:

答案 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字段和摘要。

有两个过滤条款,WHEREHAVING,但它们具有不同的作用。

  • 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);