根据GROUP中的列构建字符串

时间:2016-12-01 18:34:36

标签: sql arrays postgresql join aggregates

我有一张这样的表:

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

我需要一个结果:

user 1   AB
user 2  HGA

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

2 个答案:

答案 0 :(得分:0)

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

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. GROUP BY id。
  2. 使用text[]
  3. 构建该列的PostgreSQL array_agg(文本数组)
  4. 通过加入空字符串将数组转换回文本''与array_to_string
  5. 您也可以使用string_agg

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

答案 1 :(得分:0)

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

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