基于 GROUP 中的列构建字符串

Building a string based on columns from a GROUP

我有一个 table 这样的:

user 1    A
user 1    B
user 2    H
user 2    G
user 2    A

我需要这样的结果:

user 1   AB
user 2  HGA

有没有办法得到这样的结果?

所以这里我们创建一些测试数据

CREATE TABLE foo AS
SELECT * FROM (
    VALUES (1,'A'),(1,'B'),(2,'H'),(2,'G'),(2,'A')
) AS f(id,col);

这应该有效,

SELECT id, array_to_string(array_agg(col), '')
FROM table
GROUP BY id;

这是我们正在做的,

  1. 按 ID 分组。
  2. 使用 array_agg
  3. 构建该列的 PostgreSQL text[](文本数组)
  4. 通过在空字符串 '' 上加入 array_to_string,将数组转换回文本。

您也可以使用string_agg,

SELECT id, string_agg(col, '')
FROM foo
GROUP BY id;

更好的解决方案是使用 str_sum 聚合函数

select 
user,
str_sum(column_name,'')
from table_name
group by user;