使用HAVING子句将返回的行组限制为指定条件为TRUE的那些组。 如果省略此子句,则数据库将返回所有组的摘要行。
语法格式
HAVING condition [ , ... ]
使用方法
在WHERE子句和层级查询子句之后指定GROUP BY和HAVING。 如果同时指定GROUP BY和HAVING,则它们可以按任意顺序出现。
示例
示例1:查询那些低工资低于5000的部门中,每个部门的低工资和高工资。
SELECT section_id, MIN(salary), MAX (salary)
FROM staffs
GROUP BY section_id
HAVING MIN(salary) < 5000
ORDER BY section_id;
SECTION_ID MIN(SALARY) MAX (SALARY)
---------------------------------------- ---------------------------------------- ----------------------------------------
10 4400 4400
30 2500 11000
50 2100 8200
60 4200 9000
4 rows fetched.
示例2:以下示例在HAVING子句中使用相关子查询,该子句从结果集中删除没有部门的经理和没有经理的部门。
SELECT section_id, manager_id
FROM staffs
GROUP BY section_id, manager_id HAVING (section_id, manager_id) IN
(SELECT section_id, manager_id FROM staffs x
WHERE x.section_id = staffs.section_id)
ORDER BY section_id;
SECTION_ID MANAGER_ID
---------------------------------------- ----------------------------------------
10 101
20 201
20 100
30 114
30 100
40 101
50 100
50 123
50 124
50 122
50 120
50 121
60 103
60 102
70 101
80 100
80 146
80 145
80 148
80 149
80 147
90 100
100 101
100 108
110 205
110 101
26 rows fetched.