列中的聚合值仅存在差异

Aggregate values in columns ONLY there is a difference

其中一列的值匹配我想要的:

  1. 聚合其他列中两个值不同的数据
  2. 如果值相同则取值

示例数据

Name  Surname Age
Ryan  Smith   28
Ryan  Smith   29
Sean  Johnson 37

想要的结果:

Name  Surname Age
Ryan  Smith   28, 29
Sean  Johnson 37

姓名 ryan 出现了两次,因此希望仅在两行的数据不同的情况下聚合其他字段姓氏和年龄的数据。

两行的姓氏都是 Smith,因此无需汇总,只想在一行中填充为 Smith。

年龄不同所以想将两行的年龄合计为一行

Sean Johnson 记录对于所有列都是唯一的,因此无需汇总或修改任何内容

我试过 string_agg 函数,但这给出了结果:

Name  Surname          Age
Ryan  Smith, Smith     28,29
Sean  Johnson           37

无论两行之间的数据是否不同,它都会聚合所有字段。

您可以使用:

select name, string_agg(distinct surname, ',') as surname, string_agg(age, ',')
from t
group by name;

这假设所有 name 都是唯一的——对于大多数数据集来说这似乎是一个强有力的假设。