mysql中的排序和分组及分组函数

北京湿疹医院那家好 http://m.39.net/pf/a_9150674.html

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

一、排序;

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

student表

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

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

二、分组;

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

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

三、分组函数;

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

sum():求和;

count():行数;

avg():求平均;

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

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

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

老韩来简单写俩:

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

SQL语句:selectmax(score),classno,classnamefromstudentgroupbyclassno

结果:

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

SQL语句:selectsum(score),classno,classnamefromstudentgroupbyclassno

结果:

实际工作中这两种语句经常用到,如求一个部门一个月报销的总费用,如获取一个部门出勤率最高的同事作为优秀员工等等。今天的内容就到这里,希望可以给读者朋友一些帮助。如有问题需要咨询老韩,可根据文中图片内容找到老韩,老韩知无不答。没有点击


转载请注明:http://www.aierlanlan.com/rzdk/1916.html