MySQL分组查询

问题:查询员工表中,每个不同部门分别的平均工资

分组查询:group by关键字实现分组,group by放在where条件语句之后,order by放置中group by的后面,一会儿还会学到的having关键字,总体的循序先后为:

where条件 , group by 分组语句 , having 分组的条件 , order by排序语句
where条件是针对所有记录的,having条件只是局限的针对每一组的记录的

分组查询语法:

select
列(这个列要求必须只能是group by的后面字段),分组函数()
from
表名
where
筛选条件(针对表的所有记录)
group by
分组字段列表
having(只能配合group by使用)
与分组有关的筛选条件(针对分组后的每组内记录)
order by
排序

案例:查询每个工种的最高工资

select max(salary) , job_id from employees group by job_id;

案例:查询每个地方的部门个数

select count(*),location_id from departments group by location_id;

案例:查询每个部门每个工种的员工的平均工资

select count(*) 个数, avg(salary),department_id,job_id
from employees
group by department_id,job_id;

(部门号和工种号都相同的员工分一组)

案例:查询员工邮箱里包含"a"字母的,每个部门的平均工资

select avg(salary) 部门平均工资,department _id
from employees
where email like '%a%'
group by department_id

案例:查询的有奖金的每个领导手下员工的最高工资

select max(salary) 最高工资,manager_id
from employees
where commission_pct is not null
group by manager_id;

案例:查询部门的员工个数>5的所有部门的员工数

1)查询每个部门的员工个数
select count(*) c,department_id
from employees;
group by department_id;
2)在第一步的结果中找那个部门的员工个数>2
select count(*) c,department_id
from employees;
group by department_id
having c>5;

案例:查询的没有奖金的每个领导手下员工的最高工资,且工资大于12000

1)首先查询每个领导手下没有奖金的
select max(salary) 最高工资,manager_id
from employees
where commission_pct is null
group by manager_id;
2)在1点结果中在选工资大于12000
select max(salary) maxsalary,manager_id
from employees
where commission_pct is null
group by manager_id
having maxsalary>12000;
还可以在分组后的结果进行排序:
select max(salary) maxsalary,manager_id
from employees
where commission_pct is null
group by manager_id
having maxsalary>12000
order by maxsalary desc;
上一篇:【Rust中多线程同步机制】-多线程编程


下一篇:Excel:vba实现正则匹配