PostgreSQL HAVING 学习笔记

在 SQL 中,HAVING 子句允许我们对分组后的结果集进行过滤。在 PostgreSQL 中,HAVING 子句常用于与 GROUP BY 子句结合使用,可以根据聚合函数的返回值筛选分组结果。

HAVING 子句语法

HAVING 子句是在 GROUP BY 之后使用的条件过滤子句。其基本语法如下所示:

Copy Code
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) HAVING condition ORDER BY column_name(s);

在上面的语法中,HAVING 子句必须跟在 GROUP BY 子句之后,且在 ORDER BY 子句之前。

HAVING 子句实例

假设有一个学生成绩表格 scores,包含以下字段:student(学生姓名)、subject(课程名)、score(成绩)。我们可以使用以下 SQL 语句进行分组并使用 HAVING 子句筛选结果:

Copy Code
SELECT student, AVG(score) FROM scores GROUP BY student HAVING AVG(score) > 85;

以上 SQL 语句将按照学生姓名分组,并计算每个学生的平均成绩,然后筛选出平均成绩大于 85 分的学生。

除了使用聚合函数来构造 HAVING 子句条件外,我们还可以使用 WHERE 子句中的字段进行筛选:

Copy Code
SELECT student, AVG(score) FROM scores GROUP BY student HAVING COUNT(*) > 2 AND MAX(score) > 90;

以上 SQL 语句将按照学生姓名分组,仅保留至少有三门课程的学生,并且其中最高成绩大于 90 分的学生。

总结

通过学习本文,我们了解到了 HAVING 子句的基本语法和使用方法,并通过实例了解了如何在 PostgreSQL 中使用 HAVING 子句筛选分组结果。在实际开发中,我们可以根据具体需求灵活使用 HAVING 子句,从而得到更加精细的查询结果。