0
点赞
收藏
分享

微信扫一扫

MySQL数据库 WHERE与HAVING的区别


总结自己面试遇到手写sql题

一个SQL查询出表fenshu, 语文课程的成绩都大于80的学生姓名

如下一张表:
+--------+---------+---------+
| name | kecheng | chengji |
+--------+---------+---------+
| 张三 | 语文 | 81 |
| 张三 | 数学 | 75 |
| 李四 | 语文 | 76 |
| 李四 | 数学 | 90 |
| 王五 | 语文 | 81 |
| 王五 | 数学 | 100 |
| 王五 | 英语 | 90 |
+--------+---------+---------+

select kecheng, group_concat(name) from fenshu where chengji >80  group by kecheng having kecheng='语文';

+---------+--------------------+
| kecheng | group_concat(name) |
+---------+--------------------+
| 语文 | 张三,王五 |
+---------+--------------------+

当时自己写成 ‘select kecheng, group_concat(name) from fenshu group by kecheng having kecheng > 80 ;’
忘记了 WHERE 与HAVING 区别, 只知道HAVING作用与GROUP BY 之后. 应该在查询结果集之前用WHERE过滤掉 chengji > 80, 然后用 HAVING 查询 kecheng=‘语文’

总结: WHERE与HAVING区别在于, HAVING是对聚合后的结果进行条件的过滤, 而WHERE是在聚合前对记录进行过滤. 如果逻辑允许, 尽可能用WHERE先过滤记录, 这样能减少结果集, 提高查询效率, 最后再根据逻辑时候用HAVING进行再过滤


举报

相关推荐

0 条评论