使用 SQL 计算小计的“正确”方法

Yus*_*sha 1 sql db2 db2-400

我有一张看起来像这样的桌子

Person#  |  Person Name   | Gender | Persons Net Worth
-----------------------------------------------------------
1          Donald J           M        20
2          George W           M        20
3          Mark   B           T        20
4          Hil    C           F        20
5          Hil    C           F        20
6          Bill   C           M        20
7          Eric   Z           M        20
8          Caitl  J           T        20
Run Code Online (Sandbox Code Playgroud)

我想收集每个性别组的小计。我需要基本上

合并一个 sum(NETWORTH) where gender = 'M' group by gender sort by gender

和一个

sum(NETWORTH) where gender = 'F' group by gender sort by gender

和一个

sum(NETWORTH) where gender = 'T' group by gender sort by gender

所以我基本上希望结果是这样的:

Person#  |  Person Name   | Gender | Persons Net Worth
-----------------------------------------------------------
1          Donald J           M        20
2          George W           M        20
6          Bill   C           M        20
7          Eric   Z           M        20
                                Total: 80
4          Hil    C           F        20
5          Hil    C           F        20
                                Total: 40
3          Mark   B           T        20
8          Caitl  J           T        20
                                Total: 40
Run Code Online (Sandbox Code Playgroud)

我尝试使用WITH ROLLUP但最终失败了。我知道如何操作背后的代码来实现这一点,但如果可能的话,我宁愿在一个 SQL 查询中完成所有操作。

提前致谢

Gor*_*off 5

我会使用grouping sets(见这里):

select Person#, Name, Gender, sum(networth) as networth
from t
group by grouping sets ( (#Person, Name, Gender), (Gender));
Run Code Online (Sandbox Code Playgroud)

尽管这似乎进行了额外的聚合,但语法对于各种小计来说是灵活的。例如,如果您还想要总体总数:

group by grouping sets ( (#Person, Name, Gender), (Gender), ());
Run Code Online (Sandbox Code Playgroud)