Postgresql GROUP_CONCAT 等效吗?
我有一张表,我想为每个 id 提取一行并连接字段值。
例如,在我的表中,我有这个:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
我想输出:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
在 MySQL 中,我能够使用聚合函数 GROUP_CONCAT
,但这似乎在这里不起作用...... PostgreSQL 是否有等效的方法,或其他方法来实现此目的?
I have a table and I'd like to pull one row per id with field values concatenated.
In my table, for example, I have this:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
And I'd like to output:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
In MySQL I was able to use the aggregate function GROUP_CONCAT
, but that doesn't seem to work here... Is there an equivalent for PostgreSQL, or another way to accomplish this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
自 9.0 起这更加容易:
Since 9.0 this is even easier:
这可能是一个很好的起点(仅限 8.4+ 版本):
array_agg 返回一个数组,但您可以将其转换为文本并根据需要进行编辑(请参阅下面的说明)。
在版本 8.4 之前,您必须在使用之前自行定义它:(
摘自 PostgreSQL 文档)
说明:
This is probably a good starting point (version 8.4+ only):
array_agg returns an array, but you can CAST that to text and edit as needed (see clarifications, below).
Prior to version 8.4, you have to define it yourself prior to use:
(paraphrased from the PostgreSQL documentation)
Clarifications:
也会这么做。
Will do as well.
尝试这样:
Try like this:
假设表 your_table 有三列(name、id、value),查询如下:
KI
Assuming that the table your_table has three columns (name, id, value), the query is this one:
KI
以及适用于数组类型的版本:
and the version to work on the array type:
根据我的经验,我将 bigint 作为列类型。所以下面的代码对我有用。我正在使用 PostgreSQL 12。
这里发生类型转换。 (::文本)。
In my experience, I had bigint as column type. So The below code worked for me. I am using PostgreSQL 12.
Type cast is happening here. (::text).
我对 postgresql 的建议
My sugestion in postgresql
希望下面的 Oracle 查询能够工作。
Hope below Oracle query will work.