mysql自定义函数分组_mysql中的排序和分组及分组函数

现实中有很多这样的需求,对全班同学成绩进行排名,将所有的学生信息按照班级来分组,先将学生按班级分组再进行成绩排名等等。今天老韩就来介绍一下如何通过数据库的排序、分组、分组排序来实现这个需求(是排序,不是排名,排名讲到自定义变量时候会说)。

一、排序;

前面已经创建过学生表了,信息好像不太全,老韩要对学生表进行改造一下,老韩通过sql语句:alter table student add score int 在student表中加入一列,下一节老韩讲一下数据库、表、权限的管理,这个地方先知道就可以了。添加一列之后老韩对新增加的一列填入数据,结果如下;

633019e6b4135c903f740a46ecde1dd7.pngstudent表

排序标准写法:select 列1,列2…… from 表名 order by 列名 asc 或者desc (asc写不写都可以,表示升序,默认就是升序,desc是降序,如要降序必须指定)

老韩想通过人员id进行升序排列,SQL语句为:select * from student order by id 执行结果如下:

e0bd276e218016e67a957f8c2c9b6321.png

二、分组;

分组要使用group by实现,标准写法为:select 列1,列2…… from 表名 group by 字段,表示以某个字段分组;

老韩想把所有的学生按照班级来分组,这个需求如何实现呢?SQL语句:select * from student order by classno,只能通过这个语句来实现了,因为单纯的分组是不可行的,不能写成select id,classno,username,age,classname,vxname,score from student group by id,classno,username,age,classname,vxname,score 这个无法实现分组,如下图,可知这样写是没有意义的。

d53dbf74828cc758dab37ae6b23a455a.png

三、分组函数;

上面我们讲了单纯的分组是没有意义的,group by 要和分组函数来结合使用,常用的分组函数有以下几种;

sum():求和;

count():行数;

avg():求平均;

abs():求绝对值(可不是汽车上的防抱死);

max():取(某列)最大值;

min()取(某列)最小值;

老韩来简单写俩:

1、求所有班级中最高分是多少?

SQL语句:select max(score),classno,classname from student group by classno

结果:

99e95eb88d319324bacf513aba530ba8.png

2、求所有班级的总分数是多少?

SQL语句:select sum(score),classno,classname from student group by classno

结果:

633aed20447bf6f3f68cd1ddbaf240e8.png

实际工作中这两种语句经常用到,如求一个部门一个月报销的总费用,如获取一个部门出勤率最高的同事作为优秀员工等等。今天的内容就到这里,希望可以给读者朋友一些帮助。如有问题需要咨询老韩,可根据文中图片内容找到老韩,老韩知无不答。没有点击关注的朋友可以点波关注,你们每一次的关注、转发、收藏都是老韩持续更新的动力,谢谢观看,我们下期再见。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值