1、分组查询
将查询结果的1个或多个字段值相同的进行分组,字段值相同的分为一组
比如:根据性别来分组,性别值只有男、女,所以查询结果被分成了两组
当group by 单独使用时只显示出每组的第一个,所以group by单独使用
意义不大。
select * from employee group by gender;
2、分组注意事项
select 后面出现的字段一般都要出现在group by后面
3、group by + group_concat
group_concat(字段名) 可以作为输出字段使用
表示分组之后,使用group_concat()来放置每一组需要显示的字段值
select gender,GROUP_CONCAT(name) from employee group by gender;
4、group by + 聚合函数
通过group_concat()的启发,既然可以对每一组的指定字段放到一个集合里使用,那么也可以使用聚合函数对这个集合里面的值做一些操作
1、查询每个部门的部门名称和每个部门的工资和
select department,SUM(salary) from employee group by department;
2、查询每个部门的部门名称以及每个部门的人数
select department,COUNT(*) from employee group by department;
3、查询每个部门的部门名称以及每个部门工资大于1500的人数
select department,COUNT(salary) from employee where salary > 1500 group by department;
5、broup by + having
用来分组查询后指定一些条件来输出查询结果
having作用和where一样,但having只能用于group by
1、列出每个部门有哪些工资
select department,GRUOP_CONCAT(salary) from employee GROUP BY department;
查询每个部分的工资总和
select department,SUM(salary) from employee GROUP BY department;
查询工资总和大于9000等于的
select department,SUM(salary) from employee GROUP BY department HAVING SUM(salary) >= 9000;
having与where的区别:
1、having是对分组后的数据进行过滤
2、where是对分组后的数据进行过滤
3、having后面可以使用分组函数(统计函数)
4、where 后面不可以使用分组函数
5、where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么记录不会参加分组
6、having是对分组后的数据的约束。
查询工资大于2000的,工资总和大于6000的部门名称以及工资总和:
select department,SUM(salary) from employee where salary > 2000 GROUP BY department HAVING SUM(salary) > 6000;
将上列要求进行降序排序:
select department,SUM(salary) from employee where salary > 2000 GROUP BY department HAVING SUM(salary) > 6000 DESC;
6、书写顺序
7、执行顺序