[英]How to group by same column on different levels in SQL?
Sorry, but I'm not sure how to describe this clearly in words.对不起,但我不确定如何用语言清楚地描述这一点。
Basically I have data like基本上我有像
name tier value1 value2 value3 month
Andy 1 1 2 3 1
Bob 3 2 3 1 1
Candy 2 3 1 1 1
Daniel 1 1 1 3 1
Edward 3 1 3 1 1
Frank 3 2 2 2 1
Andy 2 1 2 2 2
Bob 2 2 1 1 2
Candy 1 2 3 2 2
Daniel 1 3 1 3 2
Edward 3 1 1 1 2
Frank 3 2 3 2 2
What I want is like我想要的就像
month tier sum(value1) sum(value2) sum(value3)
1 1 2 3 6
1 2 3 1 1
1 3 5 8 4
1 1or2 5 4 7
1 1or2or3 10 12 11
2 1 5 4 5
2 2 3 3 3
2 3 3 4 3
2 1or2 8 7 8
2 1or2or3 11 11 11
I think I can run the same aggregation logic with 3 different group by
and union the results, but is there a better way?我想我可以使用 3 个不同
group by
运行相同的聚合逻辑并将结果合并,但是有更好的方法吗?
I think it would be better if you create a dimension table which keep all possible tier cases with tier values:我认为如果您创建一个维度表来保存所有可能的层级案例和层级值会更好:
Then that query could help:那么该查询可能会有所帮助:
select t.month,
tr.tier_case as tier,
sum(t.sum_value1) as sum_value1,
sum(t.sum_value2) as sum_value2,
sum(t.sum_value3) as sum_value3
from tiers tr
join (
select month,
tier,
sum(value1) as sum_value1,
sum(value2) as sum_value2,
sum(value3) as sum_value3
from table t
group by 1,2
)t
on tr.tier = t.tier
group by 1,2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.