sql - 按多列分组并将结果作为单独列中的数组

标签 sql arrays postgresql aggregate

我有如下表格:

| col_A | col_B |
|-------|-------|
| 1     | 1     |
| 1     | 2     |
| 1     | 3     |
| 2     | 1     |
| 2     | 2     |
| 2     | 3     |
| 3     | 1     |
| 3     | 2     |

我想将结果分组并连接成一个数组,如下所示:

| col_A | col_B |
|-------|-------|
| 1,2   | 1,2,3 |
| 3     |  1,2  |

我尝试编写一个查询:

SELECT col_A, array_agg(col_B ORDER BY col_B DESC) FROM table GROUP BY col_A;

然而,这会输出:

| col_A | col_B   |
|-------|---------|
| 1     | {1,2,3} |
| 2     | {1,2,3} |
| 3     | {1,2}   |

最佳答案

您似乎想要聚合由 col_a 分组的 col_b,然后聚合由聚合数组分组的 col_a。您可以使用嵌套查询来执行此操作,您已经执行了嵌套查询的第一步:

SELECT array_agg(col_a), col_b
FROM (SELECT col_a, array_agg(DISTINCT col_b ORDER BY col_b) AS col_b
      FROM example GROUP BY col_a) grouped_b
GROUP BY col_b;

( online demo )

关于sql - 按多列分组并将结果作为单独列中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58313135/

相关文章:

mysql - 如何优化大表上的计数 SQL 查询

sql - 为 oracle 命令行设置行宽

javascript - 在 Javascript 中对具有可变深度的多维对象数组进行排序

javascript - 如何循环数组以查找另一个数组中引用的配对数字?

ruby-on-rails - rails 4.2 : Rake Task to Import CSV Issue

php - 如何在查询中用 0 替换 NULL?

php - 将 NULL 值插入到类型为 char(2) 的数据库字段中

java - 将 ArrayList 转换为对象数组

postgresql - 如何使用 COPY 命令从 csv 文件导入 jsonb 列?

postgresql - 如何使用 postgresql 检索过去 n 天的结果