在 Postgres 中从多行到单列
From multiple rows to single column in Postgres
我正在通过具有只读访问权限的 pgAdmin 4 使用 Postgres 9.5,我正在尝试编写一个 select 查询来转换这种形式的数据:
+----------+-------------------+--------------------+----------------+
| username | filters | groups | roles |
+----------+-------------------+--------------------+----------------+
| kd24 | Khaled <27607> | V1 | NewsStand User |
| kd24 | Khaled <27607> | V1 | User |
| kd24 | Khaled <27607> | Weekly KPIs | NewsStand User |
| kd24 | Khaled <27607> | Detailed Sales | User |
| kd24 | Khaled <27607> | Qanz Monthly Group | User |
| kd24 | Khaled <27607> | Detailed Sales | NewsStand User |
| kd24 | Khaled <27607> | Qanz Monthly Group | NewsStand User |
| kd24 | Khaled <27607> | Weekly KPIs | User |
| kd24 | Khaled <F_27607> | Weekly KPIs | User |
| kd24 | Khaled <F_27607> | Weekly KPIs | NewsStand User |
| kd24 | Khaled <F_27607> | Qanz Monthly Group | NewsStand User |
| kd24 | Khaled <F_27607> | Detailed Sales | User |
| kd24 | Khaled <F_27607> | V1 | User |
| kd24 | Khaled <F_27607> | Detailed Sales | NewsStand User |
| kd24 | Khaled <F_27607> | Qanz Monthly Group | User |
| kd24 | Khaled <F_27607> | V1 | NewsStand User |
| kd24 | khaled.d | Weekly KPIs | User |
| kd24 | khaled.d | V1 | NewsStand User |
| kd24 | khaled.d | Detailed Sales | NewsStand User |
| kd24 | khaled.d | Qanz Monthly Group | NewsStand User |
| kd24 | khaled.d | Weekly KPIs | NewsStand User |
| kd24 | khaled.d | V1 | User |
| kd24 | khaled.d | Detailed Sales | User |
| kd24 | khaled.d | Qanz Monthly Group | User |
+----------+-------------------+--------------------+----------------+
到这个表格:
+----------+-----------------------------------------------+-----------------------------------------------------+---------------------+
| username | filters | groups | roles |
+----------+-----------------------------------------------+-----------------------------------------------------+---------------------+
| kd24 | Khaled <27607>, Khaled <F_27607>,khaled.d | V1, Weekly KPIs, Detailed Sales, Qanz Monthly Group | NewStand User, User |
+----------+-----------------------------------------------+-----------------------------------------------------+---------------------+
请注意列过滤器、组和角色中的值可能会更改。
是否有可以执行该操作的 postgres select 脚本?
非常感谢!
您可以使用 distinct
关键字和聚合函数,如 array_agg 从每一列收集不同的值:
select
array_agg(distinct username) as username,
array_agg(distinct filters) as filters,
array_agg(distinct groups) as groups,
array_agg(distinct roles) as groups
from YourTable;
试试这个
SELECT
username,
string_agg(DISTINCT filters,',') as filters,
string_agg(DISTINCT groups,',') as roles,
string_agg(DISTINCT roles,',') as groups
FROM
table1
GROUP BY
username;
我正在通过具有只读访问权限的 pgAdmin 4 使用 Postgres 9.5,我正在尝试编写一个 select 查询来转换这种形式的数据:
+----------+-------------------+--------------------+----------------+
| username | filters | groups | roles |
+----------+-------------------+--------------------+----------------+
| kd24 | Khaled <27607> | V1 | NewsStand User |
| kd24 | Khaled <27607> | V1 | User |
| kd24 | Khaled <27607> | Weekly KPIs | NewsStand User |
| kd24 | Khaled <27607> | Detailed Sales | User |
| kd24 | Khaled <27607> | Qanz Monthly Group | User |
| kd24 | Khaled <27607> | Detailed Sales | NewsStand User |
| kd24 | Khaled <27607> | Qanz Monthly Group | NewsStand User |
| kd24 | Khaled <27607> | Weekly KPIs | User |
| kd24 | Khaled <F_27607> | Weekly KPIs | User |
| kd24 | Khaled <F_27607> | Weekly KPIs | NewsStand User |
| kd24 | Khaled <F_27607> | Qanz Monthly Group | NewsStand User |
| kd24 | Khaled <F_27607> | Detailed Sales | User |
| kd24 | Khaled <F_27607> | V1 | User |
| kd24 | Khaled <F_27607> | Detailed Sales | NewsStand User |
| kd24 | Khaled <F_27607> | Qanz Monthly Group | User |
| kd24 | Khaled <F_27607> | V1 | NewsStand User |
| kd24 | khaled.d | Weekly KPIs | User |
| kd24 | khaled.d | V1 | NewsStand User |
| kd24 | khaled.d | Detailed Sales | NewsStand User |
| kd24 | khaled.d | Qanz Monthly Group | NewsStand User |
| kd24 | khaled.d | Weekly KPIs | NewsStand User |
| kd24 | khaled.d | V1 | User |
| kd24 | khaled.d | Detailed Sales | User |
| kd24 | khaled.d | Qanz Monthly Group | User |
+----------+-------------------+--------------------+----------------+
到这个表格:
+----------+-----------------------------------------------+-----------------------------------------------------+---------------------+
| username | filters | groups | roles |
+----------+-----------------------------------------------+-----------------------------------------------------+---------------------+
| kd24 | Khaled <27607>, Khaled <F_27607>,khaled.d | V1, Weekly KPIs, Detailed Sales, Qanz Monthly Group | NewStand User, User |
+----------+-----------------------------------------------+-----------------------------------------------------+---------------------+
请注意列过滤器、组和角色中的值可能会更改。
是否有可以执行该操作的 postgres select 脚本?
非常感谢!
您可以使用 distinct
关键字和聚合函数,如 array_agg 从每一列收集不同的值:
select
array_agg(distinct username) as username,
array_agg(distinct filters) as filters,
array_agg(distinct groups) as groups,
array_agg(distinct roles) as groups
from YourTable;
试试这个
SELECT
username,
string_agg(DISTINCT filters,',') as filters,
string_agg(DISTINCT groups,',') as roles,
string_agg(DISTINCT roles,',') as groups
FROM
table1
GROUP BY
username;