十、分组查询
1、语法:
select 分组函数,字段 5
from 表名 1
where 筛选条件 2
group by 分组的列表 3
having ...... 4
order by ..... 6
其中,group by是按照某些字段进行分组;having是对分组之后的数据进行再次的过滤。
分组函数都是在group by 语句执行结束以后才会执行的,分组函数不可以直接应用在where语句中,因为group by 是在where语句执行之后才进行的。
规则:当一条语句中有group by 的话,select后面只能跟分组函数参与的分组字段。
2、案例:
案例一:查询每个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id;
案例二(加入筛选条件):查询邮箱包含字符a,每个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;
案例三:查询有奖金的每个领导下员工的最高工资
SELECT manager_id,MAX(salary)
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;
案例四:查询那个部门的员工个数大于2
SELECT department_id,COUNT(*)
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;
案例五:查询每个工种有奖金的员工的最高工资大于12000的工种编号和最高工资
SELECT job_id,MAX(salary)
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary) > 12000;
案例六:查询领导编号大于102的每个领导手下的最低工资大于5000的领导编号是哪个以及其最低工资
SELECT manager_id,MIN(salary)
FROM employees
WHERE manager_id > 102
GROUP BY manager_id
HAVING MIN(salary) > 5000;

浙公网安备 33010602011771号