mysql之group by,order by

写在前面

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

系列文章

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

mysql之select,insert,delete,updatesql

一个例子

group by数据库

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

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

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

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

分组结果spa

由上面的tb_student表能够看出,23岁的学生有两名,而其余年龄阶段的各有一名。code

在分组的时候,你能够输出计数结果,但若是你若是想输出其余的信息,好比输出名字,这样作是没有意义的。由于只会输出一个,例如:htm

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;

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

总结

这篇介绍了分组和排序的内容,在作统计的时候很是有用。

相关文章
相关标签/搜索