PostgreSQL 教程: count 函数

九月 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表进行演示。

img

COUNT(*) 示例

以下语句使用COUNT(*)函数返回payment表中的交易数:

SELECT
   COUNT(*)
FROM
   payment;

这是输出:

postgresql count example

COUNT(DISTINCT column) 示例

要获取客户支付的不同金额,您可以使用COUNT(DISTINCT amount)函数,如下面示例所示:

SELECT
	COUNT (DISTINCT amount)
FROM
	payment;

postgresql count distinct

将 COUNT 函数和 GROUP BY 子句一起使用

要获取客户的付款次数,您可以使用GROUP BY子句根据客户 ID 将付款分组,并使用COUNT()函数对每个组的付款进行计数。

以下查询说明了这个想法:

SELECT
	customer_id,
	COUNT (customer_id)
FROM
	payment
GROUP BY
	customer_id;

这是部分输出:

postgresql count with group by

将 COUNT 函数和 HAVING 子句一起使用

您可以在HAVING子句中使用COUNT函数将特定条件应用于组。例如,以下语句查找已付款超过 40 次的客户:

SELECT
	customer_id,
	COUNT (customer_id)
FROM
	payment
GROUP BY
	customer_id
HAVING
	COUNT (customer_id) > 40;

postgresql count with having

在本教程中,您学习了如何使用 PostgreSQL 的COUNT()函数返回表中的行数。