列中的聚合值仅存在差异
Aggregate values in columns ONLY there is a difference
其中一列的值匹配我想要的:
- 聚合其他列中两个值不同的数据
- 如果值相同则取值
示例数据
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
都是唯一的——对于大多数数据集来说这似乎是一个强有力的假设。
其中一列的值匹配我想要的:
- 聚合其他列中两个值不同的数据
- 如果值相同则取值
示例数据
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
都是唯一的——对于大多数数据集来说这似乎是一个强有力的假设。