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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuist__NJUPT

给个鼓励吧,谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值