简体   繁体   English

如何按SQL中不同级别的同一列分组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM