4.4 — HAVING 分组过滤
你将学到什么
- 如何用
HAVING
子句过滤 SQL 分组结果 - 与 Excel 数据透视表结果筛选的对比
为什么用 HAVING?
以下是示例中使用的销售数据:
Product | Amount | SaleDate |
---|---|---|
Apples | 120 | 2024-05-01 |
Apples | 90 | 2024-05-02 |
Oranges | 80 | 2024-05-01 |
Oranges | 70 | 2024-05-03 |
Bananas | 60 | 2024-05-02 |
Bananas | 50 | 2024-05-03 |
Pears | 40 | 2024-05-01 |
Pears | 30 | 2024-05-03 |
在 Excel 中,你可以筛选数据透视表,只显示销售额高于某值的产品。在 SQL 中,用 HAVING
过滤分组后结果。
示例:只显示总销售额大于 200 的产品
sql
SELECT Product, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY Product
HAVING SUM(Amount) > 200;
HAVING
类似于WHERE
,但用于分组/聚合后的结果。
WHERE 与 HAVING 的结合
WHERE
用于分组前筛选行。HAVING
用于分组后筛选分组。
示例:只统计 5 月份的销售,再显示高销售产品
sql
SELECT Product, SUM(Amount) AS Total_Sales
FROM sales
WHERE Date >= '2024-05-01' AND Date <= '2024-05-31'
GROUP BY Product
HAVING SUM(Amount) > 200;
提示:HAVING 也可用聚合列的别名:
sql
...
HAVING Total_Sales > 200;
关键点
HAVING
用于分组后过滤,WHERE
用于分组前。- 可结合使用实现复杂分析。