九月 7, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的count()
函数来计算表中的行数。
目录
PostgreSQL count 函数概述
count()
函数是一个聚合函数,可让您获取与查询的特定条件匹配的行数。
以下语句说明了使用count()
函数的各种方法。
count(*)
count(*)
函数返回 SELECT 语句返回的行数 ,包括 NULL 和重复项。
SELECT
count(*)
FROM
table_name
WHERE
condition;
当您将count(*)
函数应用于整个表时,PostgreSQL 必须顺序扫描整个表。
如果在大表上使用count(*)
函数,查询会很慢。这与 PostgreSQL MVCC 实现有关。由于多个事务同时看到不同的数据状态,count(*)
函数没有直接的方法来对整个表进行计数,因此 PostgreSQL 必须扫描所有行。
count(column)
与count(*)
函数类似,count(column)
函数返回SELECT
子句返回的行数。但是,它不考虑column
中的NULL
值。
SELECT
count(column)
FROM
table_name
WHERE
condition;
count(DISTINCT column)
在此形式中,count(DISTINCT column)
返回column
中唯一非空值的数量。
SELECT
count(DISTINCT column)
FROM
table_name
WHERE
condition;
我们经常使用带有GROUP BY
子句的count()
函数来返回每个组的项目数。例如,我们可以使用count()
和GROUP BY
子句来返回每个电影类别中的电影数量。
PostgreSQL count 函数示例
我们使用示例数据库中的payment
表进行演示。
count(*) 示例
以下语句使用count(*)
函数返回payment
表中的交易数:
SELECT
count(*)
FROM
payment;
这是输出:
count(DISTINCT column) 示例
要获取客户支付的不同金额,您可以使用count(DISTINCT amount)
函数,如下面示例所示:
SELECT
count(DISTINCT amount)
FROM
payment;
将 count 函数和 GROUP BY 子句一起使用
要获取客户的付款次数,您可以使用 GROUP BY 子句根据客户 ID 将付款分组,并使用count()
函数对每个组的付款进行计数。
以下查询说明了这个想法:
SELECT
customer_id,
count(customer_id)
FROM
payment
GROUP BY
customer_id;
这是部分输出:
将 count 函数和 HAVING 子句一起使用
您可以在 HAVING 子句中使用count
函数将特定条件应用于组。例如,以下语句查找已付款超过 40 次的客户:
SELECT
customer_id,
count(customer_id)
FROM
payment
GROUP BY
customer_id
HAVING
count(customer_id) > 40;
在本教程中,您学习了如何使用 PostgreSQL 的count()
函数返回表中的行数。
了解更多
PostgreSQL 教程:聚合函数
PostgreSQL 文档:聚集函数