九月 2, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的HAVING
子句来指定分组或聚合的搜索条件。
目录
PostgreSQL HAVING 子句简介
HAVING
子句指定分组或聚合的搜索条件。HAVING
子句通常与GROUP BY
子句一起使用,以根据指定条件过滤分组或聚合。
以下语句说明了HAVING
子句的基本语法:
SELECT
column1,
aggregate_function (column2)
FROM
table_name
GROUP BY
column1
HAVING
condition;
在此语法中,GROUP BY
子句返回按column1
分组的行。HAVING
子句指定过滤组的条件。
还可以添加SELECT
语句的其他子句,例如JOIN
、LIMIT
、FETCH
等。
PostgreSQL 计算HAVING
子句的时间点,在FROM
、WHERE
、GROUP BY
子句之后,在SELECT
、DISTINCT
、ORDER BY
和LIMIT
子句之前。
由于HAVING
子句在SELECT
列表子句之前求值,因此不能在HAVING
子句中使用列别名。因为在计算HAVING
子句时,SELECT
列表子句中指定的列别名还不可用。
HAVING 对比 WHERE
WHERE
子句允许您根据指定条件过滤行。但是,HAVING
子句允许您根据指定条件过滤行组。
换句话说,WHERE
子句应用于行,而HAVING
子句应用于行组。
PostgreSQL HAVING 子句示例
让我们看一下示例数据库中的payment
表。
1) 使用 HAVING 子句和 SUM 函数的示例
以下查询使用带有SUM()
函数的GROUP BY
子句来查找每个客户的总金额:
SELECT
customer_id,
SUM (amount)
FROM
payment
GROUP BY
customer_id;
以下语句添加了HAVING
子句来查询支出超过200
的客户:
SELECT
customer_id,
SUM (amount)
FROM
payment
GROUP BY
customer_id
HAVING
SUM (amount) > 200;
2) 使用 HAVING 子句和 COUNT 函数的示例
请查看示例数据库中的customer
表,如下:
以下查询使用GROUP BY
子句来查找每个商店的顾客数量:
SELECT
store_id,
COUNT (customer_id)
FROM
customer
GROUP BY
store_id
以下语句添加了HAVING
子句来查找拥有超过 300 名顾客的商店:
SELECT
store_id,
COUNT (customer_id)
FROM
customer
GROUP BY
store_id
HAVING
COUNT (customer_id) > 300;
概括
- 使用
HAVING
子句指定GROUP BY
子句返回的行组或聚合的搜索条件。