1 语法:
select 分组函数,列(要求出现在 group by 的后边)
from 表
【where 筛选条件】
group by 分组的列表
【order by 子句】
注意:查询列表必须特殊,要求是分组函数和 group by 之后出现的字段。
1.1 特点
1.1.1 分组查询中的筛选条件分为两类
数据源 位置 关键字
分组前筛选 原始表 group by 子句的前面 where
分组后筛选 分组后的结果集 group by 子句的后面 having
a.分组函数做条件肯定是放在having子句中
b.能用分组前筛选的、就优先考虑使用分组前筛选
1.1.2 group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开,没有顺序要求),表达式或函数(用的相对较少)。
1.1.3 也可以添加排序(排序放在整个分组查询的最后)。
2 简单的分组查询
3 添加筛选条件
4 添加复杂的筛选条件
5 按多个字段分组
添加排序
6 综合案例
a.查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id FROM employees GROUP BY job_id ORDER BY job_id;
b.查询员工最高工资和最低工资的差距(DIFFERENCE)
SELECT MAX(salary)-MIN(salary) DIFFRENCE FROM employees;
c.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
SELECT MIN(salsry),manager_id FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary)>=6000;
d.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
SELECT dapartment_id,count(*),AVG(salary) a FROM employees GROUP BY dapartment_id ORDER BY a DESC;
e.选择具有各个job_id 的员工人数
SELECT COUNT(*) 个数,job_id FROM employees GROUP BY job_id;