提要:在本教程中,您将学习如何使用 PostgreSQL 的 HAVING 子句来在分组中消除不满足指定条件的行。

PostgreSQL HAVING 简介

我们经常使用 HAVING 子句来过滤 GROUP BY 分组之后不满足指定条件的行。其语法如下:

SELECT
 column_1,
 aggregate_function (column_2)
FROM
 tbl_name
GROUP BY
 column_1
HAVING
 condition;

HAVING 用于针对分组之后的组设置过滤条件;而 WHERE 用于分组之前,给单个数据设置过滤条件。

PostgreSQL 中,可以在 GROUP BY 之外直接使用 HAVING,这种情况下,它会把每一行分组为独立的组。

注意,SELECT 里的字段列表和 HAVING 条件必须从聚合函数里引用。

如果 HAVING 的条件为 true,则这种查询返回单行;如果为 false,则返回零行。

PostgreSQL HAVING 示例

来看一下示例数据库中的 payment 表。

payment表结构

PostgreSQL HAVING 和 SUM 函数

在分组统计出客户支付金额的基础上,只获取金额大于200美元的记录:

SELECT
 customer_id,
 SUM (amount)
FROM
 payment
GROUP BY
 customer_id
HAVING
 SUM (amount) > 200;

PostgreSQL HAVING 和 COUNT 函数

获取客户数大于300的店铺:

SELECT
 store_id,
 COUNT (customer_id)
FROM
 customer
GROUP BY
 store_id
HAVING
 COUNT (customer_id) > 300;
上一篇:PostgreSQL的GROUP BY
下一篇:PostgreSQL的UNION