Skip to content

4.4 — HAVING 分组过滤

你将学到什么

  • 如何用 HAVING 子句过滤 SQL 分组结果
  • 与 Excel 数据透视表结果筛选的对比

为什么用 HAVING?

以下是示例中使用的销售数据:

ProductAmountSaleDate
Apples1202024-05-01
Apples902024-05-02
Oranges802024-05-01
Oranges702024-05-03
Bananas602024-05-02
Bananas502024-05-03
Pears402024-05-01
Pears302024-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 用于分组前。
  • 可结合使用实现复杂分析。