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;





猜你喜欢

转载自blog.csdn.net/weixin_46999174/article/details/108784445