MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > SQL HAVING 子句

详解SQL中不能轻视的 HAVING 子句

作者:昊昊该干饭了

HAVING子句主要用于对聚合数据进行过滤,通常与GROUPBY语句一起使用,本文主要介绍了详解SQL中不能轻视的 HAVING 子句,具有一定的参考价值,感兴趣的可以了解一下

在本文中,我们将深入解析 HAVING 的功能,了解它的用法,以及它和 WHERE 子句的区别。通过许多实际案例,我们将完整地分析 HAVING 在 SQL 中的实际应用。

HAVING 子句概述

HAVING 子句专门用于 对聚合数据进行过滤,即它用于 GROUP BY 语句的结果集。在执行 SQL 查询时,我们通常先用 WHERE 过滤原始数据,然后用 HAVING 对分组后的数据进行进一步筛选。

1. HAVING 的基本语法

SELECT 列名, 聚合函数
FROM 表名
GROUP BY 列名
HAVING 条件;

2. WHERE 和 HAVING 的区别

对比项WHERE 子句HAVING 子句
作用范围作用于 单行数据作用于 聚合后的数据
作用对象普通列聚合函数 (SUM、AVG、COUNT 等)
使用场景过滤原始数据过滤聚合后的数据
语法位置在 GROUP BY 之前在 GROUP BY 之后
计算影响影响分组前的数据集大小影响分组后的数据集大小

在 SQL 查询优化中,推荐 尽可能使用 WHERE 进行初步筛选,以减少 GROUP BY 需要处理的数据量,从而提升查询效率。

HAVING 子句的应用实例

案例 1:计算每个部门的员工数,并筛选员工数大于 3 的部门

SELECT department, COUNT(*) AS emp_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 3;

📌 解析:

案例 2:筛选平均薪资高于 5000 的部门

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;

📌 解析:

案例 3:同时使用 WHERE 和 HAVING

SELECT department, SUM(salary) AS total_salary
FROM employees
WHERE salary > 3000
GROUP BY department
HAVING SUM(salary) > 20000;

📌 解析:

HAVING 子句的高级用法

1. 使用多重条件筛选

SELECT department, COUNT(*) AS emp_count, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5 AND AVG(salary) > 6000;

📌 解析:

2. 使用 HAVING 进行范围筛选

SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department
HAVING SUM(salary) BETWEEN 10000 AND 50000;

📌 解析:

3. 结合 ORDER BY 进行排序

SELECT department, COUNT(*) AS emp_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 3
ORDER BY COUNT(*) DESC;

📌 解析:

HAVING 子句的优化策略

总结

通过合理使用 HAVING,可以有效优化 SQL 查询,提高数据库操作的效率。

到此这篇关于详解SQL中不能轻视的 HAVING 子句的文章就介绍到这了,更多相关SQL HAVING 子句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文