MySQL基础篇之分组查询
Posted nuist__NJUPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础篇之分组查询相关的知识,希望对你有一定的参考价值。
mysql基础篇之分组查询
简单分组函数的使用:
#简单分组函数的使用
select max(salary) from employees;
select min(salary) from employees;
select avg(salary) from employees;
select count(salary) from employees;
select sum(salary) from employees;
也可以这样写:
select max(salary) 最高工资, min(salary) 最低工资, sum(salary) 工资和, avg(salary) 平均工资, count(salary) 个数
from employees;
注意:sum(),svg()函数只能处理数字类型
max(),min(),count()函数可以处理任意类型
以上分组函数忽略null值
分组函数和distinct搭配使用:
#分组函数和distinct搭配使用
select count(distinct salary) from employees;
注意:一般使用count(*)统计行数
和分组函数一同查询的字段要求是group by后的字段
查询员工表中最大入职时间和最小入职时间的天数差:
#查询员工表中最大入职时间和最小入职时间的天数差
select datediff(max(hiredate),min(hiredate))
from employees;
查询部门编号为90的员工个数:
#查询部门编号为90的员工个数
select count(*)
from employees
where department_id = 90;
查询每个部门的员工的平均工资:
#查询每个部门的员工的平均工资
select avg(salary)
from employees
group by department_id ;
查询每个工种的最高工资:
#查询每个工种的最高工资
select max(salary), job_id as 工种
from employees
group by job_id;
查询每个位置上的部门个数:
#查询每个位置上的部门个数
select count(*), location_id
from departments
group by location_id;
查询邮箱种包含a字符的,每个部门的平均工资:
#查询邮箱种包含a字符的,每个部门的平均工资
select avg(salary), department_id
from employees
where email like '%a%'
group by department_id;
查询每个领导手下有奖金的员工的最高工资:
#查询每个领导手下有奖金的员工的最高工资
select max(salary), manager_id
from employees
where salary is not null
group by manager_id;
查询哪个部门的员工个数大于2:
分组后的筛选
#查询哪个部门的员工个数大于2
select count(*), department_id
from employees
group by department_id
having count(*) > 2 ;
查询每个工种有奖金的员工的最高工资大于12000的员工编号和最高工资:
#查询每个工种有奖金的员工的最高工资大于12000的员工编号和最高工资
select job_id, max(salary)
from employees
where commission_pct is not null
group by job_id
having max(salary) > 12000;
查询领导编号大于102的每个领导手下的最低工资大于5000的领导编号以及最低工资:
#查询领导编号大于102的每个领导手下的最低工资大于5000的领导编号以及最低工资
select manager_id, min(salary)
from employees
where manager_id > 102
group by manager_id
having min(salary) > 5000;
注意:分组函数做条件,一定属于分组后的筛选,需要放到having字句中,能用分组前筛选的,尽量使用分组钱筛选
按员工姓名的长度分组,查询每一组的员工个数,筛选出员工个数大于5的:
#按员工姓名的长度分组,查询每一组的员工个数,筛选出员工个数大于5的
select count(*)
from employees
group by length(last_name)
having count(*) > 5;
按多个字段分组
查询每个部门,每个工种的员工的平均工资:
#按多个字段分组
#查询每个部门,每个工种的员工的平均工资
select avg(salary) 平均工资, department_id 部门, job_id 工种
from employees
group by 部门, 工种;
注意:group by 支持单个字段分组,也支持多个字段分组,用逗号隔开即可,也可以添加排序,排序是放在整个分组查询之后的。
查询各个管理者手下的员工最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内:
#查询各个管理者手下的员工最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
select min(salary), manager_id
from employees
where manager_id is not null
group by manager_id
having min(salary) >= 6000;
查询所有部门的编号,员工数量和工资平均值,并按平均工资排序:
#查询所有部门的编号,员工数量和工资平均值,并按平均工资排序
select department_id, count(*), avg(salary)
from employees
group by department_id
order by avg(salary);
选择每个工种下的员工数:
#选择每个工种下的员工数
select count(*)
from employees
group by job_id;
以上是关于MySQL基础篇之分组查询的主要内容,如果未能解决你的问题,请参考以下文章