请先导入myemployees数据库 执行SQL脚本文件导入数据库
分 组 查 询 : \color{blue}分组查询: 分组查询:
select 查询列表
from 表
[where 筛选条件](可选)
group by 分组的字段
[order by 排序的字段];(可选)
特点:
1、和分组函数一同查询的字段必须是group by后出现的字段
2、筛选分为两类:分组前筛选和分组后筛选
针对的表 位置 连接的关键字
分组前筛选 原始表 group by前 where
分组后筛选 group by后的结果集 group by后 having
1、简单的分组
例如:查找每个部门的平均工资、最高工资、最低工资
USE myemployees;
SELECT department_id, AVG(salary),MIN(salary), MAX(salary)
FROM employees
GROUP BY department_id;
2、实现分组前的筛选
比如:查询名字中包含a字符的 每个工种的最高工资
此题我们需要先选出名字中包含a字符的员工,然后按照工种进行分组(job_id),再使用分组函数max求最大值。
USE myemployees;
SELECT MAX(salary), job_id
FROM employees
#名字中包含a字符的员工
WHERE last_name LIKE '%a%'
GROUP BY job_id;
3、实现分组后筛选
比如:查询员工个数>5的工种号。
这里我们首先需要查找每个工种的员工数count(* ), 然后count(*) > 5进行筛选。
USE myemployees;
SELECT COUNT(*),job_id
FROM employees
GROUP BY job_id
#having关键字,进行分组后的筛选
HAVING COUNT(*) > 5;
再比如:领导编号>105的每个领导手下的最低工资大于6000的领导编号和最低工资。
USE myemployees;
#③查找该领导手下的员工数
SELECT manager_id,MIN(salary)
FROM employees
#①首先领导编号大于150
WHERE manager_id>105
#②按照manager_id编号进行分组
GROUP BY manager_id
#④领导手下的最低工资大于6000
HAVING MIN(salary) > 6000;
4、添加排序
比如:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,并且按最高工资升序
USE myemployees;
#③查找该工种的最高工资
SELECT job_id, MAX(salary) AS 最高工资
FROM employees
#①首先筛选有奖金的员工
WHERE commission_pct IS NOT NULL
#②按照job_id(工种)进行分组
GROUP BY job_id
#④筛选工种的最高工资>6000
HAVING 最高工资 > 6000
#⑤按照最高工资进行排序
ORDER BY 最高工资 ASC;
5、按多个字段分组
比如:查询每个工种每个部门的最低工资,并按最低工资降序。
#②查找分组后每个组的最低工资
SELECT MIN(salary),job_id,department_id
FROM employees
#①首先按照工种、部门进行分组(两者无先后顺序区分)
GROUP BY department_id,job_id
#③按照最低工资进行降序排列
ORDER BY MIN(salary) DESC;
测试:
1、查询各工种的员工最高工资和最低工资的差距,并且差距超过4000,并且按照差距升序排列。
USE myemployees;
#②、计算各个工种的最高工资、最低工资的差距
SELECT job_id, MAX(salary) - MIN(salary) AS 差距
FROM employees
#①、首先按照job_id(工种)进行分组
GROUP BY job_id
#③、筛选差距大于4000的工种
HAVING 差距 > 4000
#⑤、按照差距进行升序排列
ORDER BY 差距 ASC;
2、查询各个部门的员工数量、工资平均值,并按平均工资降序
USE myemployees;
#②、计算各个部门人数、平均工资
SELECT department_id, COUNT(*), AVG(salary) AS 平均工资
FROM employees
#①、按照部门进行分组
GROUP BY department_id
#③、按照平局工资进行降序排列
ORDER BY 平均工资 DESC;
注 意 : \color{red}注意: 注意:随着问题逐渐复杂,对逻辑以及理解能力的要求越来越高。现在的问题,对于初学者并不是一眼就能看出如何编写的。所以理解sql语句执行顺序,以及将问题逐渐细分显得非常重要。为此我在sql语句中加入了大量的步骤执行注释,希望读者好好揣摩一下,对后面的学习非常有作用。
以上就是分组查询的主要内容,给个关注或者点个赞再走呗。