PostgreSQL HAVING 学习笔记
在 SQL 中,HAVING 子句允许我们对分组后的结果集进行过滤。在 PostgreSQL 中,HAVING 子句常用于与 GROUP BY 子句结合使用,可以根据聚合函数的返回值筛选分组结果。
HAVING 子句语法
HAVING 子句是在 GROUP BY 之后使用的条件过滤子句。其基本语法如下所示:
Copy CodeSELECT 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 CodeSELECT student, AVG(score)
FROM scores
GROUP BY student
HAVING AVG(score) > 85;
以上 SQL 语句将按照学生姓名分组,并计算每个学生的平均成绩,然后筛选出平均成绩大于 85 分的学生。
除了使用聚合函数来构造 HAVING 子句条件外,我们还可以使用 WHERE 子句中的字段进行筛选:
Copy CodeSELECT student, AVG(score)
FROM scores
GROUP BY student
HAVING COUNT(*) > 2 AND MAX(score) > 90;
以上 SQL 语句将按照学生姓名分组,仅保留至少有三门课程的学生,并且其中最高成绩大于 90 分的学生。
总结
通过学习本文,我们了解到了 HAVING 子句的基本语法和使用方法,并通过实例了解了如何在 PostgreSQL 中使用 HAVING 子句筛选分组结果。在实际开发中,我们可以根据具体需求灵活使用 HAVING 子句,从而得到更加精细的查询结果。