sql - 在 Postgres 中从多行到单列

标签 sql postgresql string-aggregation

我正在通过具有只读访问权限的 pgAdmin 4 使用 Postgres 9.5,我正在尝试编写一个选择查询来转换来自这种形式的数据:

+----------+-------------------+--------------------+----------------+
| 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
    username,
    string_agg(DISTINCT filters,',') as filters,
    string_agg(DISTINCT groups,',') as roles,
    string_agg(DISTINCT roles,',') as groups
FROM
    table1
GROUP BY
    username;

Demo

关于sql - 在 Postgres 中从多行到单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249508/

相关文章:

sql - PostgreSQL - 如何从单个行中的游标中选择元素

oracle - Group_concat MySQL 函数在 Oracle 中的等效函数

php - 不同日期有不同数据

sql - 在 PostgreSQL 中将列数据转换为行

postgresql - 在 generate_series 上转换给出 : ERROR: set-valued function called in context that cannot accept a set

python - 从数据库中的表中获取数据

mysql - 如何在一个单元格中存储具有相同名称但不同ID的行值?

sql - postgreSQL 如何将表中的多行转换为 JSON 数组

sql - 获取每个subscriber_id 每月的最大(日期)记录。每月不返回重复的 ID

mysql - 如何编写多个Inner Join的SQL查询?