PostgreSQL 教程: 聚合函数

九月 26, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 聚合函数,例如AVG()COUNT()MIN()MAX()SUM()

PostgreSQL 聚合函数简介

聚合函数对一组行执行计算并返回一行。PostgreSQL 提供了所有标准 SQL 的聚合函数,如下所示:

  • ARRAY_AGG() – 从一组输入值返回一个数组。
  • AVG() – 返回平均值。
  • COUNT() – 返回值的数量。
  • MAX() – 返回最大值。
  • MIN() – 返回最小值。
  • STRING_AGG() – 连接字符串并在它们之间放置分隔符。
  • SUM() – 返回所有或不同值的总和。

我们经常在SELECT语句中使用带有GROUP BY子句的聚合函数。在这些情况下,GROUP BY子句将结果集划分为行组,聚合函数对每个组执行计算,例如最大值、最小值、平均值等。

您只能在以下子句中使用聚合函数作为表达式:

PostgreSQL 聚合函数示例

我们使用示例数据库中的film表进行演示。

Film table

AVG() 函数示例

下面的语句使用AVG()函数计算所有电影的平均重置成本:

SELECT
	ROUND( AVG( replacement_cost ), 2 ) avg_replacement_cost
FROM
	film;

结果如下:

PostgreSQL Aggregate Function - AVG

请注意,ROUND()函数用于将结果四舍五入到小数点后两位。

要计算类别 ID 为 7 的剧情片的平均重置成本,请使用以下语句:

SELECT
	ROUND( AVG( replacement_cost ), 2 ) avg_replacement_cost
FROM
	film
INNER JOIN film_category USING(film_id)
INNER JOIN category USING(category_id)
WHERE
	category_id = 7;

结果如下:

PostgreSQL Aggregate Function - Advanced AVG

COUNT() 函数示例

要获取电影的数量,请使用COUNT(*)函数,如下:

SELECT 
    COUNT(*) 
FROM 
    film;

这是输出:

PostgreSQL Aggregate Function - COUNT

要获取剧情片的数量,您可以使用以下语句:

SELECT
	COUNT(*) drama_films
FROM
	film
INNER JOIN film_category USING(film_id)
INNER JOIN category USING(category_id)
WHERE
	category_id = 7;

结果显示我们有 62 部剧情片:

PostgreSQL Aggregate Function - Advanced COUNT

MAX() 函数示例

以下语句返回电影的最大重置成本。

SELECT 
    MAX(replacement_cost)
FROM 
    film;

PostgreSQL Aggregate Function - MAX

要获取具有最大重置成本的电影,请使用以下查询:

SELECT
	film_id,
	title
FROM
	film
WHERE
	replacement_cost =(
		SELECT
			MAX( replacement_cost )
		FROM
			film
	)
ORDER BY
	title;

img

子查询返回最大重置成本,然后外部查询使用该成本来检索电影的信息。

MIN() 函数示例

以下示例使用MIN()函数返回电影的最小重置成本:

SELECT 
    MIN(replacement_cost)
FROM 
    film;

PostgreSQL Aggregate Function - MIN

要获取具有最低重置成本的电影,请使用以下查询:

SELECT
	film_id,
	title
FROM
	film
WHERE
	replacement_cost =(
		SELECT
			MIN( replacement_cost )
		FROM
			film
	)
ORDER BY
	title;

PostgreSQL Aggregate Function - MIN with subquery

SUM() 函数示例

以下语句使用SUM()函数按电影评级分组计算电影总长度:

SELECT
	rating,
	SUM( rental_duration )
FROM
	film
GROUP BY
	rating
ORDER BY
	rating;

下图说明了结果:

PostgreSQL Aggregate Function - SUM

在本教程中,您了解了 PostgreSQL 聚合函数并应用它们来汇总数据。