HAVING
子句用于过滤 GROUP BY
结果集中的分组。与 WHERE
子句不同,WHERE
用于过滤原始数据记录,而 HAVING
主要用于对已分组的数据进行过滤,通常与聚合函数一起使用。
📚 目录
1. HAVING 子句简介
HAVING
子句是用于在 GROUP BY
操作之后,对分组数据进行筛选的工具。它与 WHERE
子句的主要区别在于,WHERE
是在分组之前进行过滤,而 HAVING
是在数据分组后对分组结果进行过滤。
通常,HAVING
与聚合函数一起使用,例如 COUNT
、SUM
、AVG
等,以筛选出符合特定条件的分组。
2. 基本语法结构
SELECT 列名, 聚合函数(列名) FROM 表名 GROUP BY 列名 HAVING 聚合函数(列名) 条件;
- 列名:指定要分组的列。
- 聚合函数:用于计算每个组的统计信息,如
COUNT
、SUM
、AVG
等。 - 条件:指定过滤的条件,通常基于聚合函数的结果。
示例:
SELECT city, COUNT(*) FROM users GROUP BY city HAVING COUNT(*) > 5;
此语句将返回每个城市中用户数量大于 5 的城市。
3. HAVING 与 GROUP BY 结合使用
HAVING
子句通常与 GROUP BY
子句一起使用,在数据分组之后进行筛选。可以使用聚合函数对分组数据进行计算,然后通过 HAVING
子句来筛选出符合条件的分组。
示例:
SELECT city, AVG(age) FROM users GROUP BY city HAVING AVG(age) > 30;
此语句将返回平均年龄大于 30 岁的城市。
4. 使用 HAVING 过滤聚合结果
当使用聚合函数(如 COUNT
、SUM
等)对数据进行分组时,可以使用 HAVING
来过滤不符合特定条件的分组。HAVING
允许你对聚合结果进行更复杂的筛选操作。
示例:
SELECT product, SUM(sales) FROM sales_data GROUP BY product HAVING SUM(sales) > 1000;
此语句将返回所有销售总额大于 1000 的产品。
发表回复