Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将不同行中的一系列值合并为一个值_Sql_Postgresql_Aggregate Functions - Fatal编程技术网

Sql 将不同行中的一系列值合并为一个值

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(按用户名划分),但它开始变得混乱起来。是否有更好的方法获得该输出?使用聚合函数 如果希望列表按字母顺

我需要做一个ETL工作,我有一个表,看起来像这样

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