Mysql必知必会-创建分组

本文详细介绍了SQL中的GROUP BY子句和HAVING子句的使用。GROUP BY用于对数据进行分组和聚合操作,而HAVING则在分组后对结果进行过滤。通过实例解释了如何利用这两个子句查询每位学生的平均成绩,并展示如何使用HAVING筛选平均成绩大于等于60分的学生。同时,文章强调了GROUP BY和HAVING在SQL查询语句中的位置和作用。
摘要由CSDN通过智能技术生成

Group BY 子句

GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
需求:有成绩表如下,表名称是sc,字段s_id是学生编号,c_id是课程编号,score是课程成绩 ;求每位同学的平均成绩
在这里插入图片描述
语句:SELECT s_id,avg(score) FROM sc GROUP BY s_id ;
由多条变一条的过程是聚合,需要写聚合函数,而由多条变成比较少记录的过程是分组聚合,需要使用group by语句;
说明 : GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

having 语句-过滤分组

having语句是分组后过滤的条件,在group by之后使用,也就是如果要用having语句,必须要先有group by语句。
group by的功能是分组聚合,将多条记录变成比较少的记录,而having的功能是由多变少之后,再变少的过程。另外having后面可以跟多种运算形式,但是运算的结果只能是一个逻辑值(0或者非0的数值)。
需求求平均成绩>=60分的学生编号及平均成绩
分析
整体思路如下:
1.看是否有条件,如果条件是从数据库获取数据时的筛选条件,应该用where语句;如果是分组聚合之后的条件,应该用having语句。本题的条件是平均成绩>=60,平均成绩是聚合的结果,应属于聚合后的条件,应该使用having语句;
2.先不考虑having语句,将分组聚合语句写出:select s_id,avg(score) 平均成绩 from sc group by s_id;
3.将过滤条件加在group by后面,完整语句:select s_id,avg(score) 平均成绩 from sc group by s_id having avg(score)>=60;
数据运算的过程如下:
1.根据s_id,把数据分成7各组,2.根据having后面的条件,判断每个组是否满足,3.满足的组输出指定字段,不满足的组不输出。
在这里插入图片描述

SELECT子句顺序

在这里插入图片描述声明:参考以下博文
https://zhuanlan.zhihu.com/p/106767752
https://zhuanlan.zhihu.com/p/107495600
如有侵权,请联系我删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值