八月 25, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的STRING_AGG()
函数连接字符串并在它们之间放置分隔符。
目录
PostgreSQL STRING_AGG()
函数介绍
PostgreSQL 的STRING_AGG()
函数是一个聚合函数,它连接字符串列表并在它们之间放置分隔符。该函数不会在字符串末尾添加分隔符。
下面显示了STRING_AGG()
函数的语法:
STRING_AGG ( expression, separator [order_by_clause] )
STRING_AGG()
函数接受两个参数和一个可选的ORDER BY
子句。
expression
是可以解析为字符串的任何有效表达式。如果您使用字符串类型以外的其他类型,则需要将这些类型的值显式转换(cast)为字符串类型。separator
是连接字符串的分隔符。
order_by_clause
是一个可选子句,指定连接结果的顺序。它具有以下形式:
ORDER BY expression1 {ASC | DESC}, [...]
除了返回类型之外,STRING_AGG()
与ARRAY_AGG()
函数类似。STRING_AGG()
函数的返回类型是字符串,而ARRAY_AGG()
函数的返回类型是数组。
与其他聚合函数(例如AVG()
、COUNT()
、MAX()
、MIN()
和SUM()
)一样,STRING_AGG()
函数通常与GROUP BY
子句一起使用。
PostgreSQL STRING_AGG()
函数示例
我们将使用示例数据库中的film
、film_actor
和actor
表进行演示。
A) 使用 STRING_AGG()
函数生成逗号分隔的列表
此示例使用STRING_AGG()
函数从film
表中返回每部电影的演员姓名列表:
SELECT
f.title,
STRING_AGG (
a.first_name || ' ' || a.last_name,
','
ORDER BY
a.first_name,
a.last_name
) actors
FROM
film f
INNER JOIN film_actor fa USING (film_id)
INNER JOIN actor a USING (actor_id)
GROUP BY
f.title;
这是部分输出:
B) 使用 STRING_AGG()
函数生成电子邮件列表
以下示例使用STRING_AGG()
函数为每个国家/地区构建电子邮件列表。每个列表中的电子邮件以分号分隔。
SELECT
country,
STRING_AGG (email, ';') email_list
FROM
customer
INNER JOIN address USING (address_id)
INNER JOIN city USING (city_id)
INNER JOIN country USING (country_id)
GROUP BY
country
ORDER BY
country;
下图是部分输出:
在本教程中,您学习了如何使用 PostgreSQL 的STRING_AGG()
函数连接字符串,并在它们之间放置分隔符。
了解更多
PostgreSQL 教程:聚合函数
PostgreSQL 文档:聚集函数