PostgreSQL:如何连接行

10 浏览
0 Comments

PostgreSQL:如何连接行

我有一个非常不寻常的问题。我想把具有相同ID的行连接成一行。为了说明我的问题,让我举个例子。这是查询语句:\n

SELECT b.id AS "ID",
       m.content AS "Conversation"
FROM bookings b 
INNER JOIN conversations c on b.id = c.conversable_id AND c.conversable_type = 'Booking'
INNER JOIN messages m on m.conversation_id = c.id
WHERE b.state IS NOT NULL
GROUP BY 1,2
LIMIT 1000;

\n这是输出结果:\n

ID     **Conversation
1223    "blah, blah, blah, blah"
1223    " ... blaaaah, blah.."
1223    "more blaaah"
1223    "last blah"
5000    "new id, with more blah"
5000    "and the blah continues"

\n有没有办法将对话行连接成一个聚合行,同时保留ID?\n像这样:\n

ID     Conversation
1223    "blah, blah, blah, blah, ... blaaaah blah.. more blaaah, last blah"
5000    "new id, with more blah and the blah continues"

\n我相信有一种高效的方法可以做到这一点。我只是自己想不出来。

0
0 Comments

问题的出现原因是作者想要将多行数据合并成一行,但是不知道如何实现。解决方法是在Stack Overflow上查找相关问题的答案并且使用PostgreSQL的string_agg()函数。

在Stack Overflow上,作者找到了一个与他的问题相似的问题,问题的链接是https://stackoverflow.com/questions/24906826。通过查看这个问题的回答,作者发现可以使用PostgreSQL中的string_agg()函数来解决问题。

下面是解决问题的代码示例:

SELECT id, string_agg(name, ', ') AS names
FROM table_name
GROUP BY id;

通过使用string_agg()函数,作者可以将表中的多个name字段合并成一个以逗号分隔的字符串,并将结果按照id分组。

作者通过查找相关问题的答案,找到了解决自己问题的方法。通过使用PostgreSQL的string_agg()函数,作者成功地将多行数据合并成一行。

0