MySql-------分组查询

分组查询 group by

分组查询中的筛选条件分为两类
分组前的筛选:用原始表的时候 ,用where在groupby 前面;
分组后的筛选:用分组后的结果集,用having 在groupby的后面;
注意:分组函数做条件一定在having子句中;

#分组查询 group by
/*
1、分组查询中的筛选条件分为两类
分组前的筛选:用原始表的时候  ,用where在groupby 前面;
分组后的筛选:用分组后的结果几,用having 在groupby的后面;
注意:分组函数做条件一定在having子句中; 
*/


#案例一:查询每个部门的最高工资
SELECT department_id,MAX(salary) FROM employees GROUP BY department_id;
#案例二:查询,每个位置上的部门个数
SELECT COUNT(*),department_id FROM departments GROUP BY location_id;


#添加筛选条件
#案例一:查询邮箱中包含a字符的,每个部门的平均工资
SELECT email,AVG(salary) 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;
 
 
#添加复杂的筛选条件
#案例一:查询那个部门的员工个数大于2(分组后还想筛选,用HAVING)
SELECT COUNT(*),department_id 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 ;

#按表达式或函数分组
#案例一:按员工姓名的长度分组,查询每一组的员工个数,晒选员工个数>5的有哪些
SELECT COUNT(*),LENGTH(last_name) FROM employees GROUP BY LENGTH(last_name) HAVING COUNT(*) >5;


#按多个字段分组
#案例一:查询每个部门每个工种的员工的平均工资
SELECT AVG(salary),department_id,job_id FROM employees GROUP BY department_id ,job_id;


#添加排序
#案例一:查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示 
SELECT AVG(salary),department_id ,job_id FROM employees GROUP BY department_id ,job_id ORDER BY AVG(salary) DESC;

#测试题
#1.查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序
SELECT job_id,MAX(salary),MIN(salary),AVG(salary),SUM(salary) FROM employees GROUP BY job_id ORDER BY job_id;
#2.查询员工最高工资和最低工资的差距
SELECT MAX(salary) - MIN(salary) AS c FROM employees 
#3.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内;
SELECT manager_id,MIN(salary) FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary) >=6000;
#4.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序;
SELECT job_id,COUNT(*),AVG(salary) FROM employees GROUP BY job_id ORDER BY AVG(salary);
#5.选择具有各个job_id 的员工人数
SELECT COUNT(*),job_id FROM employees GROUP BY job_id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YanWenCheng_

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值