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