SQL:如何按列分组而不爆炸表中的聚合值

Posted

技术标签:

【中文标题】SQL:如何按列分组而不爆炸表中的聚合值【英文标题】:SQL: How to group by column without exploding aggregating value in the table 【发布时间】:2021-11-15 20:53:40 【问题描述】:

如何在不爆炸聚合值的情况下将table_1 转换为table_2,如下所示:

-- table_1
 a    b
 aaa  1
 bbb  2
 aaa  3
 ccc  4
 ccc  4
 bbb  1
 ddd  4
 bbb  2
 aaa  3
-- table_2
 a    b   count
 aaa  1   1
 bbb  2   2
 aaa  3   2
 ccc  4   2
 ccc  4   2
 bbb  1   1
 ddd  4   1
 bbb  2   2
 aaa  3   2

count 列是 ab 列的计数,我只知道如何获取 count 值而不是像下面的代码一样消耗:

SELECT COUNT(*)
FROM table_1
GROUP BY a, b
-- result
 a    b   count
 aaa  1   1
 bbb  2   2
 aaa  3   2
 ccc  4   2
 bbb  1   1
 ddd  4   1

谁能帮帮我? 提前致谢。

【问题讨论】:

【参考方案1】:

你想要一个窗口函数:

select t1.*,
       count(*) over (partition by a, b) as count
from table_1 t1;

如果你想用这些计数创建table_2,你可以使用create table as table_2

【讨论】:

以上是关于SQL:如何按列分组而不爆炸表中的聚合值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hive 中按列分组使用聚合函数

Power Query M - 使用自定义聚合(百分位)按列值分组

在 xsl:fo 表中按列行值分组

如何按列分组并聚合其余列

如何通过 Eloquent 中具有多对多关系的外部表中的列聚合进行分组?

SUM 值按列分组,但不能“聚合”?