[英]Postgresql GROUP_CONCAT equivalent?
我有一张表,我想为每个 id 拉一行,并连接字段值。
例如,在我的表中,我有这个:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
我想拨打 output:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
在 MySQL 中,我能够使用聚合 function GROUP_CONCAT
,但这似乎在这里不起作用......是否有 PostgreSQL 的等效项,或其他方法来完成此操作?
从 9.0 开始,这更加容易:
SELECT id,
string_agg(some_column, ',')
FROM the_table
GROUP BY id
这可能是一个很好的起点(仅限 8.4+ 版):
SELECT id_field, array_agg(value_field1), array_agg(value_field2)
FROM data_table
GROUP BY id_field
array_agg返回一个数组,但您可以将其转换为文本并根据需要进行编辑(请参阅下面的说明)。
在 8.4 版本之前,您必须在使用之前自己定义它:
CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);
(从 PostgreSQL 文档解释)
说明:
SELECT array_to_string(array(SELECT a FROM b),', ');
也会这样做。
试试这样:
select field1, array_to_string(array_agg(field2), ',')
from table1
group by field1;
假设表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"
KI
以及适用于数组类型的版本:
select
array_to_string(
array(select distinct unnest(zip_codes) from table),
', '
);
我对 postgresql 的建议
SELECT cpf || ';' || nome || ';' || telefone
FROM (
SELECT cpf
,nome
,STRING_AGG(CONCAT_WS( ';' , DDD_1, TELEFONE_1),';') AS telefone
FROM (
SELECT DISTINCT *
FROM temp_bd
ORDER BY cpf DESC ) AS y
GROUP BY 1,2 ) AS x
根据我的经验,我将 bigint 作为列类型。 所以下面的代码对我有用。 我正在使用 PostgreSQL 12。
类型转换在这里发生。 (::文本) 。
string_agg(some_column::text, ',')
希望下面的 Oracle 查询将起作用。
Select First_column,LISTAGG(second_column,',')
WITHIN GROUP (ORDER BY second_column) as Sec_column,
LISTAGG(third_column,',')
WITHIN GROUP (ORDER BY second_column) as thrd_column
FROM tablename
GROUP BY first_column
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.