我需要选择不同粒度级别的数据(在Oracle中)。我有一个数据表:
c1 c2 c3 c4
a a1 10 5
a a2 10 5
b b1 10 5
b b2 10 5
我需要编写一个返回数据的查询:
c1 c2 c3
a 20 10 --aggregated data
a1 10 5 --lowest granular level data
a2 10 5 --lowest granular level data
b 20 10
b1 10 5 -- data of b1, b2 should follow the data of b; likewise a1, a2 should follow data of a
b2 10 5
我发现这很不寻常,因为我需要选择最低粒度级别和聚合级别的数据。我怎么能这样做?
答案 0 :(得分:2)
很难确定,因为你没有告诉我们你是如何从一个数据集到另一个数据集的。不过,我的猜测是,你需要像
这样的东西SELECT c1, sum(c3) c2, sum(c4) c3
FROM table_name
GROUP BY c1
UNION ALL
SELECT c2, sum(c3), sum(c4)
FROM table_name
GROUP BY c2;
答案 1 :(得分:1)
你可以从这开始:
SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by rollup(c1,c2)
只获取您需要的论坛
SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by GROUPING SETS ( (c1, c2), c1)
请参阅here其他示例和解释。