选择不同粒度级别的数据(Oracle中的分组集)

时间:2012-08-22 05:16:18

标签: sql oracle

我需要选择不同粒度级别的数据(在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

我发现这很不寻常,因为我需要选择最低粒度级别和聚合级别的数据。我怎么能这样做?

2 个答案:

答案 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其他示例和解释。