我有张像这样的桌子
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我想收集每个性别组的小计。我需要从本质上
合并一个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我试着使用WITH ROLLUP,但最终惨败。我知道如何在后面的代码中进行操作以实现这一点,但如果可能的话,我宁愿在一个SQL查询中完成所有操作。
提前感谢
发布于 2017-04-06 14:23:26
我将使用grouping sets (参见这里):
select Person#, Name, Gender, sum(networth) as networth
from t
group by grouping sets ( (#Person, Name, Gender), (Gender));虽然这似乎是一种额外的聚合,但是语法对于所有类型的小计都是灵活的。例如,如果您也想要总的总数:
group by grouping sets ( (#Person, Name, Gender), (Gender), ());发布于 2017-04-06 14:15:37
这应该可以做到这一点:将union all与表及其gender聚合一起使用,在聚合表中使用gender值,类似于原始的gender,这使您可以按需要对最终表进行排序。
select *
from (
select *
from yourTable
union all
select null, null, CONCAT(Gender, '_TOT'), sum(Persons_net_worth)
from yourTable
group by CONCAT(Gender, '_TOT')
)
order by Gender我不精通DB2甲骨文,这可能需要一些调整
https://stackoverflow.com/questions/43257669
复制相似问题