Twi*_*Kit 237 sql postgresql group-concat string-aggregation
我有一个表,我想每个id拉一行,并且字段值连接在一起.
例如,在我的表中,我有这个:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
Run Code Online (Sandbox Code Playgroud)
我想输出:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
Run Code Online (Sandbox Code Playgroud)
在MySQL中,我能够使用聚合函数GROUP_CONCAT
,但这似乎在这里不起作用...是否有等效的PostgreSQL,或其他方法来实现这一点?
a_h*_*ame 243
从9.0开始,这更容易:
SELECT id,
string_agg(some_column, ',')
FROM the_table
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
Mat*_*ood 222
这可能是一个很好的起点(仅限8.4+版本):
SELECT id_field, array_agg(value_field1), array_agg(value_field2)
FROM data_table
GROUP BY id_field
Run Code Online (Sandbox Code Playgroud)
array_agg返回一个数组,但您可以根据需要对其进行CAST编辑和编辑(请参阅下面的说明).
在8.4版之前,您必须在使用之前自行定义:
CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);
Run Code Online (Sandbox Code Playgroud)
(从PostgreSQL文档中解释)
澄清:
小智 45
SELECT array_to_string(array(SELECT a FROM b),', ');
Run Code Online (Sandbox Code Playgroud)
也会这样做.
小智 14
试试这样:
select field1, array_to_string(array_agg(field2), ',')
from table1
group by field1;
Run Code Online (Sandbox Code Playgroud)
假设表your_table有三列(name、id、value),查询如下:
select name,
array_to_string(array_agg(id), ','),
array_to_string(array_agg(value), ',')
from your_table
group by name
order by name
;
"TM67" "4,9,72" "32556,98200,22300"
"TM99" "2,3" "23009,11200"
Run Code Online (Sandbox Code Playgroud)
KI
归档时间: |
|
查看次数: |
137658 次 |
最近记录: |