我有一个表,我想拉一行每个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有类似的功能吗,或者有其他方法可以实现这个功能?


当前回答

试着这样做:

select field1, array_to_string(array_agg(field2), ',')
from table1
group by field1;

其他回答

试着这样做:

select field1, array_to_string(array_agg(field2), ',')
from table1
group by field1;

从9.0开始,这变得更容易了:

SELECT id, 
       string_agg(some_column, ',')
FROM the_table
GROUP BY id

根据我的经验,我使用bigint作为列类型。所以下面的代码为我工作。我使用的是PostgreSQL 12。

类型转换发生在这里。(::文本)。

string_agg(some_column::text, ',')
SELECT array_to_string(array(SELECT a FROM b),', ');

也行。

我在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