学习地址:
撩课 - Javaweb 系列 1 之基础语法 - 前端基础
撩课 - JavaWeb 系列 2 之 xml
撩课 - JavaWeb 系列 3 之 MySQL
撩课 - JavaWeb 系列 4 之 JDBC
撩课 - JavaWeb 系列 5 之 Web 服务器 - idea
下载地址:
https://pan.baidu.com/s/1qilY0kIpgnxuLELxjNIQxw 提取码: 4s9t
分组查询
什么是分组查询
将查询结果按照 1 个或多个字段进行分组, 字段值相同的为一组
分组使用
SELECT gender from employee GROUP BY gender;
根据 gender 字段来分组,
gender 字段的全部值只有两个 ('男'和'女'),
所以分为了两组
当 group by 单独使用时, 只显示出每组的第一条记录
所以 group by 单独使用时的实际意义不大
分组注意事项
在使用分组时,
select 后面直接跟的字段
一般都出现在 group by 后
- group by + group_concat()
- group_concat(字段名)
可以作为一个输出字段来使用
表示分组之后, 根据分组结果,
使用 group_concat() 来放置
每一组的某字段的值的集合
SELECT gender,GROUP_CONCAT(name) from employee GROUP BY gender;
group by + 聚合函数
通过 group_concat() 的启发,
我们既然可以统计出每个分组的某字段的值的集合,
那么我们也可以通过集合函数
来对这个 "值的集合" 做一些操作
查询每个部门的部门名称和每个部门的工资和
SELECT department,SUM(salary) FROM employee GROUP BY department;
查询每个部门的部门名称以及每个部门的人数
SELECT department,COUNT(*) FROM employee GROUP BY department;
查询每个部门的部门名称以及每个部门工资大于 1500 的人数
SELECT department,COUNT(salary) FROM employee WHERE salary> 1500 GROUP BY department;
group by + having
用来分组查询后指定一些条件来输出查询结果
having 作用和 where 一样, 但 having 只能用于 group by
查询工资总和大于 9000 的部门名称以及工资和
查询每个部分的工资总和
- SELECT department,GROUP_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 的区别
having 是在分组后对数据进行过滤.
where 是在分组前对数据进行过滤
having 后面可以使用分组函数 (统计函数)
where 后面不可以使用分组函数
WHERE 是对分组前记录的条件,
如果某行记录没有满足 WHERE 子句的条件,
那么这行记录不会参加分组;
而 HAVING 是对分组后数据的约束.
查询工资大于 2000 的
SELECT * FROM employee WHERE salary>2000;
各部门工资
SELECT department, GROUP_CONCAT(salary) FROM employee WHERE salary>2000 GROUP BY department;
各部门工资总和
SELECT department, SUM(salary) FROM employee WHERE salary>2000 GROUP BY department;
各部门工资总和大于 6000
SELECT department, SUM(salary) FROM employee WHERE salary>2000 GROUP BY department HAVING SUM(salary)>6000;
各部门工资总和大于 6000 降序排列
- SELECT department, SUM(salary) FROM employee WHERE salary>2000 GROUP BY department HAVING SUM(salary)>6000
- ORDER BY SUM(salary) DESC;
书写顺序
执行顺序
来源: http://www.jianshu.com/p/b090de5aaab1