在 PostgreSQL 中,HAVING 子句用于在使用 GROUP BY 子句进行分组后,对分组的结果进行筛选。HAVING 子句通常与聚合函数一起使用,以过滤分组结果。以下是 HAVING 子句的基本语法:
SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;

其中:
  •  column1, column2, ... 是要分组的列。

  •  table_name 是要从中检索数据的表格的名称。

  •  aggregate_function(column) 是应用于每个组的聚合函数。

  •  HAVING condition 是用于筛选分组结果的条件。


以下是一个简单的例子:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;

在这个例子中,我们计算了每个部门的平均工资,并使用 HAVING 子句筛选出平均工资大于 60000 的部门。

HAVING 子句在与 GROUP BY 一起使用时非常有用,因为它允许你在分组之后对结果进行条件过滤。请注意,HAVING 子句通常出现在 GROUP BY 之后,但在 ORDER BY 子句之前。

以下是一个更复杂的例子,使用 HAVING 子句结合 WITH 子句:
WITH department_avg_salary AS (
    SELECT department, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department
)
SELECT department, avg_salary
FROM department_avg_salary
WHERE avg_salary > 60000;

在这个例子中,我们首先使用 WITH 子句创建了一个 CTE,计算了每个部门的平均工资。然后,在主查询中,我们使用 HAVING 子句筛选出平均工资大于 60000 的部门。




转载请注明出处:http://www.zyzy.cn/article/detail/14138/PostgreSQL