MySQL之分组查询

#进阶6:分组查询

/*

语法:(执行顺序)
select 分组函数,分组的字段 -- ⑤
from 表名 --   ①
where 分组前的筛选条件-- ②
group by 分组的字段,...  -- ③
having 分组后的筛选条件 -- ④
order by 排序列表 --⑥


特点:

筛选可以分为分组前筛选和分组后筛选

                                  针对的数据            使用的关键字        位置
    分组前筛选          原始表                        where                  group by前面
    分组后筛选          分组后的结果集        having                 group by后面
    
    分组函数做条件放在having后面!
*/

USE myemployees;
#引入案例:

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

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


#1.简单 的分组查询

#案例1:查询每个工种的最高工资

SELECT  MAX(salary) 最高工资,job_id
FROM employees
GROUP BY job_id;


#案例2: 查询每个位置号上的部门个数

SELECT COUNT(*) 个数,location_id
FROM departments 
GROUP BY location_id;

 
#2.添加分组前筛选条件
 
#案例1:查询有奖金的每个部门的最低工资

SELECT MIN(salary) 最低工资,department_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY department_id;


 
 
 #案例2:查询邮箱中包含a字符的,每个管理者手下的工资和
 

 SELECT SUM(salary) 工资和,manager_id
 FROM employees
 WHERE email LIKE '%a%'
 GROUP BY manager_id;

 
 #3.添加分组后筛选条件
 #案例1:查询哪个部门的最低工资>5000
 

 #① 查询每个部门的最低工资

 SELECT MIN(salary),department_id
 FROM employees
 GROUP BY department_id


 #② 筛选刚才的结果

  SELECT MIN(salary),department_id
 FROM employees
 GROUP BY department_id
 HAVING MIN(salary)>5000


  #案例2:查询部门经理编号是1开头的,哪个位置上的部门个数>2个的位置编号
 #①查询每个位置的部门经理编号是1开头的部门个数

 

扫描二维码关注公众号,回复: 3032073 查看本文章
 SELECT COUNT(*),location_id
 FROM departments
 WHERE manager_id LIKE '1%'
 GROUP BY location_id


 
 #②筛选 看哪个位置的部门个数>2

  SELECT COUNT(*),location_id
 FROM departments
 WHERE manager_id LIKE '1%'
 GROUP BY location_id
 HAVING COUNT(*)>2

 #4.添加排序
 #案例:查询哪个工种的平均工资高于5000,并且按平均工资进行降序

 
 #①查询每个工种的平均工资

 SELECT AVG(salary) 平均工资,job_id
 FROM employees
 GROUP BY job_id

  #②添加分组后筛选

  SELECT AVG(salary) 平均工资,job_id
 FROM employees
 GROUP BY job_id
 HAVING 平均工资>5000


 #③排序
 

    SELECT AVG(salary) 平均工资,job_id
 FROM employees
 GROUP BY job_id
 HAVING 平均工资>5000
 ORDER BY 平均工资 DESC;

 #5.按多个字段分组

 #案例:查询员工编号 不在100到120之间的每个工种每个部门的最低工资,并且按最低工资升序
  #①查询每个工种每个部门的最低工资

 

 SELECT MIN(salary) 最低工资,job_id,department_id
 FROM employees
 GROUP BY job_id,department_id


 #②添加筛选
 
 

SELECT MIN(salary) 最低工资,job_id,department_id
 FROM employees
 WHERE employee_id NOT BETWEEN 100 AND 120
 GROUP BY job_id,department_id

 #③排序
 
 

   SELECT MIN(salary) 最低工资,job_id,department_id
 FROM employees
 WHERE employee_id NOT BETWEEN 100 AND 120
 GROUP BY job_id,department_id
 ORDER BY 最低工资 DESC;

猜你喜欢

转载自blog.csdn.net/yuanmomoya/article/details/81981395