当前位置: 首页 > news >正文

mysql的having语句

MySQL的HAVING语句用于在GROUP BY子句对数据进行分组后,过滤满足特定条件的组。与WHERE子句不同,HAVING子句可以在过滤条件中使用聚合函数,而WHERE子句则不能。通常,HAVING子句与GROUP BY子句一起使用,以实现对分组数据的高级过滤。

基本语法

SELECT 列1, 列2, ..., 聚合函数(列)
FROM 表名
WHERE 条件
GROUP BY 列1, 列2, ...
HAVING 条件
ORDER BY 列1, 列2, ...;

关键点解析

  1. GROUP BY子句:用于将结果集按照一个或多个列进行分组。

  2. 聚合函数:如SUMCOUNTAVGMAXMIN等,用于对分组后的数据进行计算。

  3. HAVING子句:用于过滤分组后的结果,只能使用聚合函数或GROUP BY中指定的列。

  4. WHERE子句:用于在分组前过滤行,不能使用聚合函数。

示例

假设有一个名为employees的表,结构如下:

idnamedepartmentsalary
1AliceSales5000
2BobSales7000
3CharlieHR8000
4DavidHR10000
5EveIT9000
6FrankIT10000
示例1:查找每个部门的工资总和大于15000的部门
SELECT department, SUM(salary) as total_salary
FROM employees
GROUP BY department
HAVING SUM(salary) > 15000;

运行结果:

departmenttotal_salary
HR18000
IT19000
注释: 该查询首先按部门分组,然后计算每个部门的工资总和,最后过滤出总和大于15000的部门。
示例2:查找每个部门的平均工资大于8000的部门
SELECT department, AVG(salary) as average_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 8000;

运行结果:

departmentaverage_salary
HR9000
IT9500
注释: 该查询计算每个部门的平均工资,并过滤出平均工资大于8000的部门。
示例3:查找每个部门中工资最高的员工,且最高工资大于8000
SELECT e.department, e.name, e.salary
FROM employees e
JOIN (SELECT department, MAX(salary) as max_salaryFROM employeesGROUP BY departmentHAVING max_salary > 8000
) m ON e.department = m.department AND e.salary = m.max_salary;

运行结果:

departmentnamesalary
HRCharlie8000
HRDavid10000
ITEve9000
ITFrank10000
注释: 该查询首先找出每个部门的最高工资,过滤出最高工资大于8000的部门,然后join原始表获取这些部门中工资最高的员工信息。
示例4:查找员工数量大于1且工资总和大于15000的部门
SELECT department, COUNT(*) as num_employees, SUM(salary) as total_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 1 AND SUM(salary) > 15000;

运行结果:

departmentnum_employeestotal_salary
HR218000
IT219000
注释: 该查询过滤出员工数量大于1且工资总和大于15000的部门。
示例5:查找工资范围(最大工资 - 最小工资)大于2000的部门
SELECT department, MAX(salary) - MIN(salary) as salary_range
FROM employees
GROUP BY department
HAVING MAX(salary) - MIN(salary) > 2000;

运行结果:

departmentsalary_range
Sales2000
HR2000
注释: 该查询计算每个部门的工资范围,并过滤出范围大于2000的部门。

结论

HAVING语句是MySQL中用于分组后过滤的强大工具,它允许使用聚合函数来筛选满足条件的组。通过结合GROUP BY子句和HAVING子句,可以实现对数据的复杂查询和分析。正确理解和使用HAVING语句,能够帮助数据库管理员和开发人员更高效地从数据库中提取有价值的信息。

http://www.lryc.cn/news/526418.html

相关文章:

  • 华为数据之道-读书笔记
  • CDN、源站与边缘网络
  • 工业相机 SDK 二次开发-Sherlock插件
  • FlinkSql使用中rank/dense_rank函数报错空指针
  • VS C++ 配置OPENCV环境
  • 【SpringSecurity】基本开发流程
  • Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
  • ChatGPT从数据分析到内容写作建议相关的46个提示词分享!
  • 在 Windows 11 中设置 WSL2 Ubuntu 的 `networkingMode=mirrored` 详细教程
  • 万字长文总结前端开发知识---JavaScriptVue3Axios
  • 怎么样把pdf转成图片模式(不能复制文字)
  • 本地centos网络配置
  • kotlin内联函数——runCatching
  • Python3 正则表达式:文本处理的魔法工具
  • 《DiffIR:用于图像修复的高效扩散模型》学习笔记
  • windows平台通过命令行安装前端开发环境
  • 记交叉编译asio_dtls过程
  • 学习yosys(一款开源综合器)
  • 自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 对于Docker的初步了解
  • C语言进阶——3字符函数和字符串函数(2)
  • 机器学习day3
  • 追剧记单词之:国色芳华与单词速记
  • AIGC浪潮下,图文内容社区数据指标体系构建探索
  • 总线、UART、IIC、SPI
  • 戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法
  • 【python】四帧差法实现运动目标检测
  • JVM学习指南(48)-JVM即时编译
  • office 2019 关闭word窗口后卡死未响应
  • [操作系统] 深入进程地址空间