MySql中DQL分组查询介绍

DQL分组查询介绍

分组查询

语法格式: SELECT 分组函数,列(要求出现在group by的后面)

from 表

WHERE 筛选条件

group by 分组的列表

order by 子句

首先来查看一下案列要操作的表

在这里插入图片描述

# 查看每个部分的薪资最高(根据job_id区分部门)
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;

在这里插入图片描述

# 查看job_id的人数
SELECT COUNT(*),job_id
FROM employees
GROUP BY job_id

在这里插入图片描述

在这里插入图片描述

当我们没写列会出现什么情况呢,结果就是我们看不到是哪个部分的,比如下面的情况,我们得不到有用的信息

在这里插入图片描述

*那有的人可能会问,可不可以把所有信息显示出来呢(比如使用select ),答案是不行的,因为同一个部门的其他信息你不能保证是相同的,所以建议下面用什么分组,上面显示就写什么

案例

在这里插入图片描述

# 需求一:统计每个部分薪资>10000的人数
# 先写一个统计部门人数的把
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_i

在这里插入图片描述

# 然后实现筛选
SELECT COUNT(*),department_id
FROM employees
WHERE salary > 10000
GROUP BY department_id

在这里插入图片描述

在这里插入图片描述

# 需求二:在需求一的基础上继续筛选count(*) < 2的部门
SELECT COUNT(*),department_id
FROM employees
WHERE salary > 10000
GROUP BY department_id
WHERE COUNT(*) < 2 # 错误写法
# 这样应该就可以了吧

在这里插入图片描述

# 怎么报错了,赶紧上网查一查,哦 ,原来不能用where了而改用了HAVING(having 拥有)
SELECT COUNT(*),department_id
FROM employees
WHERE salary > 10000
GROUP BY department_id
HAVING COUNT(*) < 2

在这里插入图片描述
在这里插入图片描述

Q:GROUP BY后面还能接什么呢

可以接我们前面所学的单行函数,举例

SELECT COUNT(*),LENGTH(last_name)
FROM employees
GROUP BY LENGTH(last_name)

在这里插入图片描述

多个字段分组

在这里插入图片描述

# 不同部门不同工种分组
SELECT COUNT(*),department_id,job_id
FROM employees
GROUP BY department_id,job_id
# 太简单了,后面再接一个条件就行了

在这里插入图片描述

分组后排序

在这里插入图片描述

我们可以使用order by对分组后的进行排序

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值