SQLite HAVING 子句
HAVING子句用于在 SQL 查询中对GROUP BY产生的分组结果进行筛选。它类似于WHERE子句,但不同的是,WHERE仅在分组前筛选原始数据,而HAVING在分组后对聚合结果进行筛选。通常,HAVING用于与聚合函数一起使用。
基本语法
SELECT column_name(s), aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name
HAVING aggregate_function(column_name) condition;
column_name(s): 用于选择的列。aggregate_function: 聚合函数(例如COUNT(),SUM(),AVG(),MAX(),MIN())。table_name: 查询的数据表。condition: 可选的查询条件。HAVING aggregate_function(column_name) condition: 根据聚合结果进行筛选。
1. 使用 HAVING 过滤聚合结果
HAVING 常与聚合函数结合使用,可以在分组后对聚合数据进行过滤。
示例:
- 按
department列分组,计算每个部门的总薪资,并仅返回总薪资大于 5000 的部门:
SELECT department, SUM(salary)
FROM employees
GROUP BY department
HAVING SUM(salary) > 5000;
- 该查询返回总薪资大于 5000 的部门及其总薪资。
2. 使用 HAVING 和多个聚合条件
你可以在 HAVING 子句中设置多个条件,来对聚合结果进行更精确的筛选。
示例:
- 按
department列分组,计算每个部门的平均薪资,要求平均薪资大于 5000 且员工人数大于 10:
SELECT department, AVG(salary), COUNT(*)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000 AND COUNT(*) > 10;
- 该查询返回平均薪资大于 5000 且员工人数大于 10 的部门。
3. HAVING 与 WHERE 的区别
WHERE: 用于筛选原始数据,通常在GROUP BY之前使用。HAVING: 用于筛选GROUP BY产生的分组数据,通常在分组后使用。
注意:WHERE 不能直接与聚合函数一起使用,而 HAVING 可以。
示例:
- 先筛选出薪资大于 3000 的员工,再按
department分组,计算每个部门的平均薪资,最后筛选出平均薪资大于 5000 的部门:
SELECT department, AVG(salary)
FROM employees
WHERE salary > 3000
GROUP BY department
HAVING AVG(salary) > 5000;
- 该查询首先筛选薪资大于 3000 的员工,然后对这些员工按部门分组并计算平均薪资,最后返回平均薪资大于 5000 的部门。
4. HAVING 和 GROUP BY 结合使用
通常,HAVING 与 GROUP BY 一起使用,用于对分组后的结果进行进一步筛选。你可以在 GROUP BY 后应用聚合条件。
示例:
- 按
department列分组,计算每个部门的员工人数,并返回员工人数大于 5 的部门:
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
- 该查询返回员工人数大于 5 的部门。
5. 使用 HAVING 进行排序后的筛选
有时你可能希望对分组后的结果进行排序,并基于排序结果进一步筛选。
示例:
- 按
department列分组,计算每个部门的总薪资,按总薪资降序排列,并只返回前 3 个部门:
SELECT department, SUM(salary)
FROM employees
GROUP BY department
HAVING SUM(salary) > 10000
ORDER BY SUM(salary) DESC
LIMIT 3;
- 该查询返回总薪资大于 10000 的前 3 个部门。
总结
HAVING子句用于筛选GROUP BY产生的分组结果,通常与聚合函数一起使用。WHERE用于筛选原始数据,HAVING用于筛选聚合后的数据。- 可以在
HAVING中使用多个条件来进一步筛选分组后的结果。 HAVING可以与GROUP BY、聚合函数和排序功能一起使用,灵活控制查询结果。
HAVING 是进行聚合数据筛选时非常重要的工具,特别是在生成报告和进行数据分析时。更多详细内容请关注其他相关文章。