MySQL 分组查询简单例子



# 分组查询  

/*
语法 : 
	select 分组函数 列 (要求放在group by 的后面)

	from 表
	 
	 【where 筛选条件 】
	 
	 group by  分组的列表 
	 
	 【排序 】

注意:

		查询列表 比较特殊 要求是分组函数 和  group by 后出现的字段 
		分组查询 中的条件查询分为两类 
		
		一类是  分组前筛选  在group by 前面添加 where 
		
		第二类 是 分组后筛选   在group by 后面 添加  having  
		
		分组函数做条件 肯定是放在 having 子句的
		
		能在前面筛选就在前面筛选
*/



# 案例1 查询 每个部门的平均工资 

SELECT AVG(salary) FROM employees;


#查询 每个工种的最高工资  
# 简单的分组查询 
# 先根据工种分组  然后 配合分组函数  分组函数 面对的是一群数据 而不是单个  

SELECT MAX(salary) , job_id FROM employees GROUP BY job_id ;

#查询每个位置上的部门的个数  

SELECT COUNT(1),location_id FROM departments GROUP BY location_id;


#添加 筛选条件  
 #案例1: 查询 邮箱中的包含的a字符的 ,每个部门的平均工资  
 SELECT
  AVG (salary),
  department_id
FROM
  employees
WHERE email LIKE "%a%"  # 查询条件 必须放在 group by 前面
GROUP BY department_id;


# 查询 每个领导人手下的员工的 最高的工资 有奖金  

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



#  添加复杂的筛选   
 # 查询哪个部门的员工个数大于2  
 # 首先查询每个部门的员工个数  
 SELECT
  COUNT(*),
  department_id
FROM
  employees
GROUP BY department_id;

   
#  然后 根据 查询到的 结果 再进行筛选  查询哪个部门的员工大于2   分组后的筛选  

#  无效的组合函数引用  利用  having 过滤分组   where 不可以在group by 前面   

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




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


#案列 3  查询领导编号 >102 的每个领导手下的 最低工资 》  5000 
 SELECT
  MIN(salary),
  manager_id
FROM
  employees
WHERE manager_id > 102
GROUP BY manager_id
HAVING MIN(salary) > 5000;



# 按照表达式 分组   


# 案例1 : 按照员工长度分组  查询 每一组的员工个数,筛洗 员工个数大于5 的有哪些


SELECT COUNT(1) ,LENGTH(last_name) "姓名长度" FROM employees GROUP BY 
LENGTH(last_name) HAVING COUNT(1) >5;


# 每个部门 每个工种的 员工的平均工资  多个字符 分组查询 

SELECT AVG(salary),job_id,department_id FROM employees GROUP BY job_id,department_id;


# 分组查询之后 添加排序  

#每个部门 每个工种的 员工的平均工资  奖金不为空  并且 平均工资大于 10000  并且 按照平均工资的高低显示



SELECT AVG(salary),job_id,department_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id,department_id 

HAVING AVG(salary) >10000

ORDER BY AVG(salary) DESC;





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Trump. yang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值