Sql 将不同行中的一系列值合并为一个值
我需要做一个ETL工作,我有一个表,看起来像这样Sql 将不同行中的一系列值合并为一个值,sql,postgresql,aggregate-functions,Sql,Postgresql,Aggregate Functions,我需要做一个ETL工作,我有一个表,看起来像这样 user_name|角色 ----------+------ 用户A |管理员 用户A |系统 用户B |编辑器 用户B |电源用户 用户B |系统 我想把它变成 user_name|角色 ----------+------ 用户A |管理员,系统 用户B |编辑器,超级用户,系统 我曾想过创建临时表并使用row\u number()over(按用户名划分),但它开始变得混乱起来。是否有更好的方法获得该输出?使用聚合函数 如果希望列表按字母顺
user_name|角色
----------+------
用户A |管理员
用户A |系统
用户B |编辑器
用户B |电源用户
用户B |系统
我想把它变成
user_name|角色
----------+------
用户A |管理员,系统
用户B |编辑器,超级用户,系统
我曾想过创建临时表并使用
row\u number()over(按用户名划分)
,但它开始变得混乱起来。是否有更好的方法获得该输出?使用聚合函数
如果希望列表按字母顺序排列:
string_agg("role", ', ' ORDER BY "role")
链接到
string_agg("role", ', ' ORDER BY "role")
SELECT user_name,
array_to_string(array(
select role
from my_table
where user_name =m.user_name
order by user_name
), ', '
) combined_rows
from my_table m
group by 1