介绍 PostgreSQL STRING_AGG() 和 ARRAY_AGG()函数

本文主要介绍了PostgreSQL的STRING_AGG()和ARRAY_AGG()函数。STRING_AGG()是聚集函数,用分隔符连接一组字符串且结尾无多余分隔符;ARRAY_AGG()接收表达式返回数组。文中还给出了使用示例,并指出STRING_AGG()类似MySQL的GROUP_CONCAT函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文学习如何使用介绍 PostgreSQL STRING_AGG 函数,使用分割连接多个字符串。

1. 介绍PostgreSQL STRING_AGG()

PostgreSQL STRING_AGG() 函数是聚集函数,使用分隔符连接一组字符串,但结尾不会多余分隔符。语法如下:

STRING_AGG ( expression, separator [order_by_clause] )
  • expression 可以解析成字符串的任何有效表达式。如果是其他数据类型,需要显示转换为字符串。

  • separator 指定连接字符串的分隔符。

order_by_clause 子句是可选子句,用于指定连接字符串的顺序。语法形式如下:

ORDER BY expression1 {ASC | DESC}, [...]

STRING_AGG()函数类似与ARRAY_AGG()函数,除了返回值不同。前者返回字符串,后者返回array类型。和其他聚集函数AVG(), COUNT(), MAX(), MIN(), SUM()一样,STRING_AGG()函数通常也和group by子句一起使用。

2. PostgreSQL STRING_AGG()示例

对于电影示例数据库中的三个表 film, film_actor, actor ,即电影、演员以及电影和演员的关联表。

这里使用STRING_AGG()返回每部电影的演员列表:

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;

3. ARRAY_AGG()函数

前面已提及两者之间的差异,我们看语法:

ARRAY_AGG(expression [ORDER BY [sort_expression {ASC | DESC}], [...])

接收一个表达式,可以返回任何类型可作为数组元素的值。order by子句是可选的,用于指定聚集中处理行的顺序,其决定返回结果数组的顺序,通常也和group by一起使用。还使用前面的示例数据库:

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;

与前面的差异是返回数组。需要指定顺序可以使用order by指定顺序:

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;

4. 总结

本文介绍了PostgreSQL STRING_AGG()函数和ARRAY_AGG()函数。前者用于使用指定的分隔符连接多个字符串,类似于MySQL的 GROUP_CONCAT函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值