参考:
想要弄懂GROUP BY看这一篇就够了
数据库:group by 的使用
聚合函数
1.MAX:返回某列的最大值
2.MIN(column) 返回某列的最高值
3.COUNT(column) 返回某列的总行数
4.COUNT(*) 返回表的总行数 (包含null)
5.SUM(column) 返回某列的相加总和
6.AVG(column) 返回某列的平均值
GROUP BY
语句根据一个或多个列对结果集进行分组
常用语句:
单个字段分组
select grade from student group by grade 查出学生等级的种类(按照等级划分,去除重复的)按照多个字段分组
select name , sum(salary) from student group by name , grade 按照名字和等级划分,查看相同名字下的工资总和
注意:这里有一点需要说明一下,多个字段进行分组时,需要将name和grade看成一个整体,只要是name和grade相同的可以分成一组;如果只是name相同,grade不同就不是一组。group_concat函数是将归类后的名字以逗号连接成字符串
select job ,group_concat(ename) from emp group by job;求每个部门所有工资总和。
select deptno,sum(sal) from emp group by deptno;查询每个部门工资大于1500的的人数
select deptno,count(*) from emp where sal >1500 group by deptno;
1.工资>1500 2.按部门分组 3.统计人数
HAVING
HAVING用于分组后的再次筛选,只能用于分组。(注意:分组后)
求工资总和大于9000的部门,并按照工资总和排序。
select deptno,sum(sal) total from emp group by deptno having sum(sal) >9000
order by sum(sal) asc;
having和where区别:
1.having是分组后,where是分组前
2.where不用使用聚合函数,having可以使用聚合函数。
3.where在分组之前就会进行筛选,过滤掉的数据不会进入分组。
执行顺序
关键字的书写顺序如下:
1.select
2.from
3.where
4.group by
5.having
6.order by
7. limit
关键字的执行顺序如下:
1.from //行过滤
2.where
3.group by
4.having
5.select //列过滤
6.order by//排序
7.limit//附加