SQL:HAVING 与 WHERE – 过滤聚合数据
本文演示了 SQL 中 WHERE
和 HAVING
子句之间的主要区别,特别是在处理聚合数据时。 我们将使用寻找最专业的讲师的示例。 单独的 WHERE
子句不足以完成此任务; HAVING
子句是必要的。
了解差异
WHERE
子句在 分组发生之前 过滤各个行。 它将条件应用于表中的各个记录。 相反,HAVING
子句在 分组之后过滤 ,对 COUNT
、SUM
、AVG
和 MIN
等聚合函数进行操作。 这在基于聚合结果进行过滤时至关重要,如我们的讲师专业化示例中所示。
最佳实践
为了清晰和高效,一般规则是在 WHERE
之前使用 GROUP BY
,在 HAVING
之后使用 GROUP BY
。这种方法简化了查询构造并提高了可读性。
优化查询
以下查询使用 ANSI 连接和 HAVING
子句来有效识别具有最大专业化数量的讲师:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID = S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
此修改后的查询不再需要 WHERE
子句作为 theta 连接条件,从而实现更加简化和高效的查询。
以上是WHERE 与 HAVING:何时应该使用每个子句来查找聚合数据?的详细内容。更多信息请关注PHP中文网其他相关文章!