八月 25, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的array_agg()
聚合函数从一组输入值返回一个数组。
目录
PostgreSQL array_agg 函数介绍
PostgreSQL 的array_agg()
函数是一个聚合函数,它接受一组值并返回一个数组,其中每个值都被分配到数组中的一个元素。
下面显示了array_agg()
函数的语法:
array_agg(expression [ORDER BY [sort_expression {ASC | DESC}], [...])
array_agg()
接受一个表达式,该表达式返回对于数组元素有效的任何类型的值。
ORDER BY
子句是可选子句。它指定聚合过程中处理的行的顺序,这决定了结果数组中元素的顺序。
与其他聚合函数(例如avg()
、count()
、max()
、min()
和sum()
)类似,array_agg()
经常与GROUP BY
子句一起使用。
PostgreSQL array_agg 函数示例
我们将使用示例数据库中的film
、film_actor
和actor
表进行演示。
不带 ORDER BY 子句的 array_agg 函数使用示例
以下示例使用array_agg()
函数返回电影标题列表和每部电影的演员列表:
SELECT
title,
array_agg (first_name || ' ' || last_name) actors
FROM
film
INNER JOIN film_actor USING (film_id)
INNER JOIN actor USING (actor_id)
GROUP BY
title
ORDER BY
title;
这是部分输出:
正如你所看到的,每部电影中的演员都是任意排列的。要按姓氏或名字对演员进行排序,您可以在array_agg()
函数中使用ORDER BY
子句。
带 ORDER BY 子句的 array_agg 函数使用示例
此示例使用array_agg()
函数返回电影列表以及每部电影的演员列表(按演员的名字排序):
SELECT
title,
array_agg (
first_name || ' ' || last_name
ORDER BY
first_name
) actors
FROM
film
INNER JOIN film_actor USING (film_id)
INNER JOIN actor USING (actor_id)
GROUP BY
title
ORDER BY
title;
下面显示了部分输出:
您可以按演员的名字和姓氏对每部电影的演员列表进行排序,如以下查询所示:
SELECT
title,
array_agg (
first_name || ' ' || last_name
ORDER BY
first_name ASC,
last_name DESC
) actors
FROM
film
INNER JOIN film_actor USING (film_id)
INNER JOIN actor USING (actor_id)
GROUP BY
title
ORDER BY
title;
下图显示了查询的部分输出:
在本教程中,您学习了如何使用 PostgreSQL 的array_agg()
函数从一组输入值返回一个数组。
了解更多
PostgreSQL 教程:聚合函数
PostgreSQL 文档:聚集函数