现实中有很多这样的需求,对全班同学成绩进行排名,将所有的学生信息按照班级来分组,先将学生按班级分组再进行成绩排名等等。今天老韩就来介绍一下如何通过数据库的排序、分组、分组排序来实现这个需求(是排序,不是排名,排名讲到自定义变量时候会说)。
一、排序;
前面已经创建过学生表了,信息好像不太全,老韩要对学生表进行改造一下,老韩通过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
结果:
实际工作中这两种语句经常用到,如求一个部门一个月报销的总费用,如获取一个部门出勤率最高的同事作为优秀员工等等。今天的内容就到这里,希望可以给读者朋友一些帮助。如有问题需要咨询老韩,可根据文中图片内容找到老韩,老韩知无不答。没有点击