九月 27, 2024
摘要:在本教程中,您将学习如何使用 PostgreSQL 聚合函数,例如AVG()
、COUNT()
、MIN()
、MAX()
和SUM()
。
目录
PostgreSQL 聚合函数简介
聚合函数对一组行执行计算并返回一行。PostgreSQL 提供了所有标准 SQL 的聚合函数,如下所示:
- ARRAY_AGG() – 从一组输入值返回一个数组。
- AVG() – 返回平均值。
- COUNT() – 返回值的数量。
- MAX() – 返回最大值。
- MIN() – 返回最小值。
- STRING_AGG() – 连接字符串并在它们之间放置分隔符。
- SUM() – 返回所有或不同值的总和。
我们经常在 SELECT 语句中使用带有 GROUP BY 子句的聚合函数。在这些情况下,GROUP BY
子句将结果集划分为行组,聚合函数对每个组执行计算,例如最大值、最小值、平均值等。
此外,您还可以在 PostgreSQL 中创建自定义的聚合函数。
您只能在以下子句中使用聚合函数作为表达式:
PostgreSQL 聚合函数示例
我们使用示例数据库中的film
表进行演示。
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 聚合函数并应用它们来汇总数据。