暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL查询中having语句的使用场景和用法

聚数云海 2021-07-13
1645

之前小明给大家介绍了MySQL里group by的用法,今天继续给大家分享having的用法,having也是日常工作中容易出错的一个知识点。


having语句是分组后过滤的条件,在group by之后使用,也就是如果要用having语句,必须要先有group by语句。


group by的功能是分组聚合,将多条记录变成比较少的记录,而having的功能是由多变少之后,再变少。另外,having后面可以跟多种运算形式,但是运算的结果只能是一个逻辑值(0或者非0的数值)


题目1:求平均成绩≥60分的学生编号及平均成绩



整体思路如下:


step.1 看是否有条件,如果条件是从数据库获取数据时的筛选条件,应该用where语句;如果是分组聚合之后的条件,应该用having语句;


本题的条件是平均成绩≥60,平均成绩是聚合的结果,应属于聚合后的条件,应该使用having语句;


step.2 先不考虑having语句,将分组聚合语句写出:select s_id,avg(s_score) 平均成绩 from score group by s_id;


step.3 将过滤条件加在group by后面,完整语句:select s_id,avg(s_score) 平均成绩 from score group by s_id having avg(s_score)>=60;


数据运算的过程如下:


step.1 根据s_id,把数据分成7个组;


step.2 根据having后面的条件,判断每个组是否满足;


step.3 满足的组输出指定字段,不满足的组不输出。


题目2:查询至少两门课程及格的学生学号


分析题意:输出学生学号,条件是至少两门课程及格,从方法论上看,最后输出的结果是小于等于7条的,记录是由多变少再表少的过程,应该用having语句。


另外,条件是每位同学及格的课程数量≥2,及格的课程数量可以用sum(s_score≥60)来表示,s_score≥60,满足的返回1,不满足的返回0,最后进行求和,得到的是及格的课程数量,sum(s_score)≥60涉及到聚合,条件应该放在having后面。


最后的语句:select s_id from score group by s_id having sum(s_score≥60)≥2;


数据运算的过程如下:


step.1 根据s_id,把数据分成7个组;

step.2 根据having后面的条件,判断s_score≥60,满足的返回1,不满足返回0;

step.3 针对s_score≥60的结果进行求和,在和2作比较,sum(s_score≥60)≥2,满足的返回1,不满足返回0;

step.4 满足的组输出指定字段,不满足的组不输出。


看完这篇文章后大家get到having的用法了吗?想要了解更多MySQL相关知识,获取相关课程资源,添加老师微信并回复【MySQL资料包】领取更多相关资料!👇


文章转载自聚数云海,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论