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;

结果如下:

 avg_replacement_cost
----------------------
                19.98
(1 row)

请注意,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;

结果如下:

 avg_replacement_cost
----------------------
                21.09
(1 row)

COUNT() 函数示例

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

SELECT 
    COUNT(*) 
FROM 
    film;

这是输出:

 count
-------
  1000
(1 row)

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

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

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

 drama_films
-------------
          62
(1 row)

MAX() 函数示例

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

SELECT 
    MAX(replacement_cost)
FROM 
    film;

输出:

  max
-------
 29.99
(1 row)

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

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

输出:

 film_id |          title
---------+-------------------------
      34 | Arabia Dogma
      52 | Ballroom Mockingbird
      81 | Blindness Gun
      85 | Bonnie Holocaust
     138 | Chariots Conspiracy
...

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

MIN() 函数示例

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

SELECT 
    MIN(replacement_cost)
FROM 
    film;

输出:

 min
------
 9.99
(1 row)

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

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

输出:

 film_id |         title
---------+------------------------
      23 | Anaconda Confessions
     150 | Cider Desire
     182 | Control Anthem
     203 | Daisy Menagerie
...

SUM() 函数示例

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

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

下图说明了结果:

 rating | sum
--------+------
 G      |  861
 PG     |  986
 PG-13  | 1127
 R      |  931
 NC-17  | 1080
(5 rows)

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