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.pingtaimeng.com/article/detail/14138/PostgreSQL