sql 分组 和排序

388 阅读2分钟

mysql分组

概念

首先分组是一定要有分组函数的。如果没有分组函数的话,那么分组就没有了意义。

分组就是把一类的内容,做一个分组函数的处理。如果不用分组函数的话,结果往往不是我们想要的。

关键字:GROUP BY

单个分组

案例:如下代码查出老师表中老师的平均教龄:

select classid, AVG(teaching_age) from 老师表 GROUP BY classid

注意的地方:如果分组,那么分组的字段,一般是写在被查询显示字段。例如上边是按照老师的classid分组查出来的,那么一般会有两个字段的结果,那就是classid和avg的平均值,这个两个值才是正确的值,并且是案例所需要的。

分组后的条件

分组后使用的查询条件关键字与非分组查询是不一样的。

分组查询的关键子是having

案例:查询同一个类型的老师(classid)的平均教龄,并且教龄是大于12年的才显示。

select classid, AVG(teaching_age) as c from zyjtphome_ecms_teacher_new GROUP BY classid HAVING c>12

多个字段分组

主要是看字段在关键字的group by 字段1,字段2

select ttid,classid,count(*) from zyjtphome_ecms_teacher_new GROUP BY ttid,classid

案例:老师先按照 ttid 分组 再按照 classid分组

那么分组的结果是:在一个记录里边把相同的ttid 和 classid 分到一个组里边。

mysql排序

关键字

ORDER BY

SELECT * FROM zyjtphome_ecms_teacher_new  ORDER BY ttid; #按照老师的ttid排序

单个字段排序

以老师的ttid进行排序:

SELECT * FROM zyjtphome_ecms_teacher_new  ORDER BY ttid; #按照老师的ttid排序

多个字段排序

可以多个字段进行排序,排序的规则是:如果字段1相同的字段值,那么按照字段2进行排序。

SELECT * FROM zyjtphome_ecms_teacher_new  ORDER BY classid,ttid; #按照老师的classid,ttid排序,先按照classid排序,然后ttid排序。

升序

默认是升序的。asc

SELECT * FROM zyjtphome_ecms_teacher_new  ORDER BY ttid; #按照老师的ttid排序

降序

desc 是降序的。

如下mysql

SELECT * FROM zyjtphome_ecms_teacher_new  ORDER BY ttid desc;

如果是降序的话,就是按照就要在字段后加上一个desc