继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

mysql之group by,order by

翻过高山走不出你
关注TA
已关注
手记 81
粉丝 31
获赞 66

写在前面

上篇文章介绍mysql的增删改查操作,这篇将介绍group和order by操作。

系列文章

mysql之创建数据库,创建数据表

mysql之select,insert,delete,update

一个例子

group by

顾名思义,是按照哪个字段分组,比如按照名字分组,则是所有名字相同的分为一组。在一些计数及求和中用到最多。

还以上篇文章的学生信息表为例。

1.求出每个年龄阶段的学生的个数。

use school;-- 求出每个年龄阶段的学生个数select * from tb_student;select age,count(age) from tb_student group by Age;

分组结果

由上面的tb_student表可以看出,23岁的学生有两名,而其他年龄阶段的各有一名。

在分组的时候,你可以输出计数结果,但如果你如果想输出其他的信息,比如输出名字,这样做是没有意义的。因为只会输出一个,例如:

select `name`,age,count(age) from tb_student group by Age;

虽然没有报错,但是这样的统计,并不能让人信服。因为23岁的学生有两名:麻子和孙悟空。

所以,group by大都和聚合函数配合函数一起使用,聚合聚合,顾名思义就是,将多个结果合成一个结果,比如计数,求和,平均数等函数。

那如果真的要输出所有23岁的名字的话,那么可以这样:

MySQL group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

这个函数,可以将分组后拼接内容,也算一个聚合函数,将多个结果拼接成一个结果,也可以拼接的同时进行结果去重。

select group_concat(`name`,',') as stuName,age,count(age) as AgeCount from tb_student group by Age ;

将想要的统计内容,分组拼接:

有上面的结果,也可以看出23岁的学生有两名,分别为麻子,孙悟空。这样统计的结果更具有说服力。

ordery by

按哪个字段进行排序,默认升序,desc降序。

接着在上个例子中按照统计的人数进行降序排列

use school;select group_concat(`name`,',') as stuName,age,count(age) as AgeCount from tb_student group by Age order by count(age) desc;

排序比较好理解,这里就介绍到这里。

总结

这篇介绍了分组和排序的内容,在做统计的时候非常有用。

 

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP