我有一个表,其中包含组、子组以及子组的子组。我想按总和进行聚合,如下所示:
grp, sub_group, sub_sub_group, sum
grp-A, 10
sub-A, 6
sub_sub_A 3
sub_sub_B 3
sub-B, 4
sub_sub_A 4
所以grp-A
的和是从sub-A
和sub-B
(6+4)得到的,这是它们各自的子群之和。我如何用PostgreSQL实现这一点?
1条答案
按热度按时间fdbelqdn1#
这里的关键问题是
sum
列对于不同的行有不同的含义。当然,各种含义是相关的,但还不足以使查询特别清晰。我能想到的最好的方法是通过自己的查询执行每个级别的聚合,组合结果集,然后将它们按所需的顺序排序。这是一种可能的方法:如果您不关心行的顺序,那么您可以使用联合查询作为顶级查询,展开其中的一个级别。
请注意,如果
base_table.sub_group
或base_table.sub_sub_group
包含任何空值,则结果将不明确。