select分组函数

语法:
select 分组函数,列(要求出现在group by的后面)
from 表
[where 筛选条件]
group by 分组的列表
[order by 字句]
注意:
查询列表必须特殊,要求是分组函数和group by后面出现的字段。

  1. #简单的分组查询
  2. #引入:查询每个部门的平均工资
  3. SELECT AVG(`salary`)FROM employees
  4. GROUP BY `department_id`;
  5. #查询每个工种的最高工资:
  6. SELECT MAX(`salary`),`job_id`FROM employees GROUP BY `job_id`;

添加筛选条件:

案例:查询邮箱中包含a字符的,每个部门的平均工资

SELECT AVG(`salary`),`department_id`FROM employees
WHERE `email`LIKE'%a%' GROUP BY `department_id`;

执行效果:
2020-09-05_233326.png
#案例2:查询有奖金的每个领导手下员工的最高工资

SELECT MAX(`salary`),`manager_id`FROM employees 
WHERE `commission_pct`IS NOT NULL 
GROUP BY `manager_id`;

运行效果:
2020-09-05_233835.png

#添加分组后的筛选条件

案例1:查询那个部门的员工个数大于>2
#①查询每个部门的员工个数
#②根据①的结果进行筛选,查询那个部门的员工个数>2

SELECT COUNT(*),`department_id` 
FROM employees GROUP BY `department_id`
HAVING COUNT(*)>2;

运行结果:
2020-09-06_000456.png
#案例2:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
#①查询每个工种有奖金的员工的最高工资
#根据①的结果继续筛选出最高工资>12000;

SELECT MAX(`salary`),`job_id`FROM employees 
WHERE `commission_pct` IS NOT NULL
GROUP BY `job_id` 
HAVING MAX(`salary`)>12000;

运行结果:
2020-09-06_000633.png