如何连接与键关联的所有值?

How to concat all values associated with a key?

我有以下架构:

CREATE TABLE table1 
(
    user,
    phoneType, --from ['A','B','C','D', 'E'], user can have any number of any type
    uniquePhoneID, --unique string identifying the phone
    day_id --date; record does not necessarily exist for every seen user + phoneType every day, represented as number in example
);

INSERT INTO table1 
VALUES (1, 'A', xyz, 1),
       (1, 'A', abc, 1),
       (1, 'B', def, 2),
       (1, 'A', xyz, 2),
       (1, 'C', hij, 4),
       (1, 'A' xyz, 5),
       (2, 'C', w, 9),
       (2, 'D', z, 10),
       (2, 'A', p, 10),
       (2, 'E', c, 11),
       (3, 'A', r, 19),
       (3, 'B', q, 19),
       (3, 'B', q, 20),
       (3, 'B', f, 20),
       (3, 'B', y, 21); 

单个用户,uniquePhoneID,day_id 最多只会出现一次,但不一定在任何一天都出现。 我希望按字母顺序将 table 中的每个用户与其 4 个 phoneType 连接起来,因此结果如下:

1 | AABC
2 | ACDE
3 | ABBB

我已经尝试了几种不同的方法来做到这一点,但我不确定如何得到我正在寻找的答案。

我认为 user 是一个保留字,所以你必须解决这个问题。否则,我认为这样的东西对你有用:

select user, string_agg (phonetype, '' order by phonetype)
from table1
group by user

-- 编辑 2022 年 4 月 21 日 --

啊,好的。我没有从最初的问题中了解到这一点。

如果您在聚合之前对原始 table 使用了 distinct 会怎样?

select userid, string_agg (phonetype, '' order by phonetype)
from (select distinct userid, phonetype, uniquephoneid from table1) x
group by userid

我从这个版本得到了这些结果:

1   AABC
2   ACDE
3   ABBB

如果该逻辑仍然不起作用,您能否更改样本数据以找到失败的示例?