MySQL学习四:分组查询

本文讲解了MySQL分组查询的基本语法,特点,以及如何在实际项目中运用,涉及多个案例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库来源:Mysql 基础教程
2.数据库说明:
本文使用的数据库名称为 myemployees,其中有 8 张表,分别为 customers 表,departments 表,employees 表,job_grades 表,jobs 表,locations 表,orders 表,salespeople 表。

一、分组查询基本语法

select 分组函数,查询列表(出现在 group by 的后面)
fromwhere 筛选条件
group by 分组的字段
having 筛选条件2(一般为分组函数,如 min,max,sum,avg等)
order by 排序的字段

二、分组查询特点

1、 和分组函数一同查询的字段必须是 group by 后出现的字段,因为 select 的执行顺序在 group by 之后,select 只可选取 group by 聚合过后的字段和计算的字段(select 后的字段范围小于等于 group by 后的字段范围)

2、 筛选分为两类:分组前筛选和分组后筛选

针对的表位置连接的关键字
分组前筛选原始表group by 前where
分组后筛选group by 后的结果集group by 后having

having 相当于 Excel 中数据透视表的筛选器

3、 分组可以按单个字段也可以按多个字段,同时可以搭配排序查询使用

4、注意关键词 “每个/每组”,遇到类似表述就要使用分组查询

三、分组查询相关案例(仅展示有限部分)

案例一:查询每个工种的最高工资,并按最高工资降序排列

select job_id, max(salary)
from employees
group by job_id
order by max(salary) desc

在这里插入图片描述

案例二:查询每个位置上的部门个数

select location_id, count(*) 部门个数
from departments
group by location_id

在这里插入图片描述

案例三:查询邮箱中包含a字符且部门id不为空值的,每个部门的平均工资

select department_id, round(avg(salary),3) 平均工资
from employees
where email like '%a%' and department_id is not null
group by department_id

在这里插入图片描述

案例四:查询每个领导手下,有奖金的员工的最高工资

select manager_id, max(salary) 
from employees
where commission_pct is not null
group by manager_id

在这里插入图片描述

案例五:查询哪个部门的员工个数 > 1

select department_id, count(*)
from employees
group by department_id
having count(*) > 1

在这里插入图片描述

案例六:查询每个工种有奖金的员工的最高工资>10000的工种编号和最高工资

select job_id, max(salary)
from employees
where commission_pct is not null
group by job_id
having max(salary) > 10000

在这里插入图片描述

案例七:查询最低工资 > 5000 的每个工种与每个非空部门,并按最低工资降序

select job_id, department_id, min(salary)
from employees
where department_id is not null
group by job_id, department_id
having min(salary) > 5000
order by min(salary) desc

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值