PostgreSQL:如何连接行
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我相信有一种高效的方法可以做到这一点。我只是自己想不出来。
问题的出现原因是作者想要将多行数据合并成一行,但是不知道如何实现。解决方法是在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()函数,作者成功地将多行数据合并成一行。