having的用法
having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。
例如:
有这么一个面试题:
请写出一条SQL满足一下查询需求(表名:score)
1)筛选出不及格科目的个数大于1的学生
2)同时计算该学生不及格科目的平均分
3)不使用子查询
+—-+——–+———+——-+
| id | name | subject | score |
+—-+——–+———+——-+
| 1 | 张三 | 数学 | 80 |
| 2 | 张三 | 语文 | 53 |
| 3 | 张三 | 英语 | 59 |
| 4 | 李四 | 数学 | 55 |
| 5 | 李四 | 语文 | 56 |
| 6 | 李四 | 语文 | 50 |
| 7 | 王五 | 数学 | 100 |
| 8 | 王五 | 语文 | 90 |
+—-+——–+———+——-+
select name,count(1) as cnt,avg(score) avg from score where score < 60 group by name having cnt > 1;
+——–+—–+———+
| name | cnt | avg |
+——–+—–+———+
| 张三 | 2 | 56.0000 |
| 李四 | 3 | 53.6667 |
+——–+—–+———+