|NO.Z.00025|——————————|BigDataEnd|——|Java&MySQL单表/约束/事务.V03|——|MySQL.v03|DQL_分组查询|
一、DQL分组查询
### --- 分组
——> 分组查询指的是使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组
### --- 语法格式
SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
二、需求1: 通过性别字段 进行分组
### --- 需求1: 通过性别字段 进行分组
-- 按照性别进行分组操作
SELECT * FROM emp GROUP BY sex; -- 注意 这样写没有意义
三、分析: GROUP BY 分组过程

### --- 注意:
~~~ 分组时可以查询要分组的字段, 或者使用聚合函数进行统计操作.
~~~ * 查询其他字段没有意义
### --- 需求: 通过性别字段 进行分组,求各组的平均薪资
SELECT sex, AVG(salary) FROM emp GROUP BY sex;
四、需求2:
### --- 需求2:
~~~ 查询所有部门信息
~~~ 查询每个部门的平均薪资
~~~ 查询每个部门的平均薪资, 部门名称不能为null
### --- SQL实现
~~~ # 查询有几个部门
SELECT dept_name AS '部门名称' FROM emp GROUP BY dept_name;
~~~ # 查询每个部门的平均薪资
SELECT
dept_name AS '部门名称',
AVG(salary) AS '平均薪资'
FROM emp GROUP BY dept_name;
~~~ # 查询每个部门的平均薪资, 部门名称不能为null
SELECT
dept_name AS '部门名称',
AVG(salary) AS '平均薪资'
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name;
五、需求3:
### --- 需求3:
~~~ 查询平均薪资大于6000的部门.
~~~ # 分析:
——> 1) 需要在分组后,对数据进行过滤,使用 关键字 hiving
——> 2) 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
### --- SQL实现:
~~~ # 查询平均薪资大于6000的部门
-- 需要在分组后再次进行过滤,使用 having
SELECT
dept_name ,
AVG(salary)
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name HAVING AVG(salary) >
6000 ;
六、where 与 having的区别
过滤方式 | 特点 |
where | where 进行分组前的过滤 where 后面不能写 聚合函数 |
having | having 是分组后的过滤 having 后面可以写 聚合函数 |
七、sql语句
### --- sql语句
/*
分组查询 使用 group by 子句
语法格式: select 分组字段/聚合函数 from 表名 group by 分组字段
*/
SELECT * FROM emp GROUP BY sex;
~~~ # 通过性别字段 进行分组,求各组的平均薪资
SELECT sex, AVG(salary) FROM emp GROUP BY sex;
~~~ # 查询所有部门信息
SELECT dept_name AS '部门名称' FROM emp GROUP BY dept_name;
~~~ # 查询每个部门的平均薪资
SELECT dept_name,AVG(salary) FROM emp GROUP BY dept_name;
~~~ # 查询每个部门的平均薪资, 部门名称不能为null
SELECT
dept_name AS '部门名称',
AVG(salary) AS '部门平均薪资'
FROM emp
WHERE dept_name IS NOT NULL
GROUP BY dept_name;
~~~ # 查询平均薪资大于6000的部门.
-- 1. 首先要分组求平均薪资
-- 2. 求出 平均薪资大于 6000的部门
-- 在分组之后 进行条件过滤 使用: having 判断条件
SELECT
dept_name,
AVG(salary)
FROM emp
WHERE dept_name IS NOT NULL GROUP BY dept_name
HAVING AVG(salary) > 6000;
/*
where 与 having的区别
where
1.在分组前进行过滤
2.where后面不能跟 聚合函数
having
1.是在分组后进行条件过滤
2.having 后面可以写 聚合函数
*/
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv005-mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!