having
作用:对查询的结果进行筛选操作
语法:having 条件 或者 having 聚合函数 条件
适用场合:一般跟在group by之后
mysql> select * from employee;
+-------+--------+--------+------+------------+----------+--------+
| empno | ename | job | mgr | hiredate | sal | deptnu |
+-------+--------+--------+------+------------+----------+--------+
| 1004 | 猪八戒 | 经理 | 1009 | 2001-04-02 | 29750.00 | 20 |
| 1006 | 猴子 | 经理 | 1009 | 2011-05-01 | 28500.00 | 30 |
| 1007 | 张飞 | 经理 | 1009 | 2011-09-01 | 24500.00 | 10 |
| 1008 | 诸葛亮 | 分析师 | 1004 | 2017-04-19 | 30000.00 | 20 |
| 1013 | 林俊杰 | 分析师 | 1004 | 2011-12-03 | 30000.00 | 20 |
| 1002 | 牛魔王 | 销售员 | 1006 | 2018-02-20 | 16000.00 | 30 |
| 1003 | 程咬金 | 销售员 | 1006 | 2017-02-22 | 12500.00 | 30 |
| 1005 | 后裔 | 销售员 | 1006 | 2011-09-28 | 12500.00 | 30 |
| 1010 | 韩信 | 销售员 | 1006 | 2018-09-08 | 15000.00 | 30 |
| 1012 | 安琪拉 | 文员 | 1006 | 2011-12-03 | 9500.00 | 30 |
| 1014 | 甄姬 | 文员 | 1007 | 2019-01-23 | 7500.00 | 10 |
| 1011 | 妲己 | 文员 | 1008 | 2018-05-23 | 11000.00 | 20 |
| 1001 | 小乔 | 文员 | 1013 | 2018-12-17 | 8000.00 | 20 |
+-------+--------+--------+------+------------+----------+--------+
13 rows in set (0.03 sec)
mysql> select deptnu,count(*) from employee group by deptnu;
+--------+----------+
| deptnu | count(*) |
+--------+----------+
| 10 | 2 |
| 20 | 5 |
| 30 | 6 |
+--------+----------+
3 rows in set (0.03 sec)
mysql> select deptnu,count(*) from employee group by deptnu having count(*)>2;
+--------+----------+
| deptnu | count(*) |
+--------+----------+
| 20 | 5 |
| 30 | 6 |
+--------+----------+
2 rows in set (0.04 sec)
mysql> select deptnu,job,count(*) from employee group by deptnu,job ;
+--------+--------+----------+
| deptnu | job | count(*) |
+--------+--------+----------+
| 10 | 文员 | 1 |
| 10 | 经理 | 1 |
| 20 | 分析师 | 2 |
| 20 | 文员 | 2 |
| 20 | 经理 | 1 |
| 30 | 文员 | 1 |
| 30 | 经理 | 1 |
| 30 | 销售员 | 4 |
+--------+--------+----------+
8 rows in set (0.03 sec)
mysql> select deptnu,job,count(*) as num from employee group by deptnu,job having num>=2;
+--------+--------+-----+
| deptnu | job | num |
+--------+--------+-----+
| 20 | 分析师 | 2 |
| 20 | 文员 | 2 |
| 30 | 销售员 | 4 |
+--------+--------+-----+
3 rows in set (0.02 sec)
mysql> select deptnu,job,count(*) as num from employee group by deptnu,job having job='文员' and num>=2;
+--------+------+-----+
| deptnu | job | num |
+--------+------+-----+
| 20 | 文员 | 2 |
+--------+------+-----+
1 row in set (0.03 sec)