group by用法多个字段_MySQL查询中group by语句的使用场景和用法

有成绩表如下,表名称是sc,字段s_id是学生编号,c_id是课程编号,score是课程成绩:

d1abcb6657fd0ed04171a4f123f00a43.png

问题:求每位同学的平均成绩?

首先理解题意,分以下几步:

1.根据题意,可以想一下预期的结果是怎样的,应该有几个字段,有几条记录。本题应该有2个字段:学生编号、平均成绩,有7条记录(截图中s_id有七个非重复值);

2.预期的结果有7条记录,而源数据有18条记录,由多条变一条的过程是聚合,需要写聚合函数,而由多条变成比较少记录的过程是分组聚合,需要使用group by语句;

3.需要分组,那group by后面应该跟哪个字段,可以看下预期结果的字段里面,哪个是主键(非空不重复的字段),哪个就是分组字段。学生编号、平均成绩两个字段中,学生编号是主键,所以学生编号就是分组字段;

4.输出的字段写在select语句,from后面跟上表的名称,where后面跟筛选条件(没有可不写),group by 后面跟分组字段,所以这道题的写法如下:

select s_id,avg(score) as 平均成绩 from sc group by s_id;

分组聚合的过程是怎样的?

1.首先是分组,分组字段是s_id,把s_id一样的数据分到一个组,根据s_id把sc表分成七份,效果如下:

b261ee52445c6c95283c5f800e8b0d92.png

2.其次是聚合,聚合是由多变一的过程,就是每一个组变成一条记录,有聚合的取聚合的结果,没有聚合的取每个组的第一条记录,avg(score) 取每个组的成绩的平均成绩(avg是平均函数,属于聚合函数),s_id没有聚合,就取每个组的第一条记录,又因为每个组的s_id都一样,所以取一个是合理的。过程如下:

7fa91228f81ab0c969b7569852379172.png

以上是使用mysql,自己总结的一些心得(也就是网上找不到的),可能不太精准,但可以适用于各种情况,欢迎指正~~

如果感觉有用,给个赞和关注哈,后面会经常更新数据分析相关文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值