在 SQL 中,HAVING子句主要用于对分组后的数据进行筛选。
一、作用
1. 筛选分组结果
• 在使用聚合函数进行分组统计后,HAVING可以根据聚合函数的结果来过滤那些满足特定条件的分组。例如,要找出订单总金额大于 1000 的客户,可以先按客户进行分组,计算每个客户的订单总金额,然后使用HAVING子句筛选出总金额大于 1000 的客户分组。
2. 与聚合函数配合使用
• 通常与聚合函数如SUM(求和)、AVG(平均值)、COUNT(计数)等一起使用,对分组后的结果进行条件判断。例如,使用COUNT函数统计每个部门的员工人数,然后通过HAVING筛选出员工人数大于 10 的部门。
二、与WHERE子句的区别
1. 作用对象不同
• WHERE子句在分组之前对数据进行筛选,作用于表中的每一行数据。
• HAVING子句在分组之后对数据进行筛选,作用于分组后的结果集。
2. 使用场景不同
• 如果要基于单个行的条件进行筛选,使用WHERE子句。例如,筛选出年龄大于 30 的员工记录。
• 如果要基于分组后的聚合结果进行筛选,使用HAVING子句。例如,找出平均工资大于 5000 的部门。
三、语法结构
SELECT column1, column2, aggregate_function(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2
HAVING aggregate_condition;
其中,aggregate_function是聚合函数,aggregate_condition是基于聚合函数结果的条件。