我发现使用GROUPING SET子句指定所需的确切集合要容易得多:
WITH data(val1, val2, val3) AS ( SELECt 'a' ,'a-details' ,'1' FROM DUAL UNIOn ALL SELECt 'b' ,'b-details' ,'2' FROM DUAL UNIOn ALL SELECt 'c' ,'c-details' ,'3' FROM DUAL )SELECt NVL(val1,'Total Result'), val2, SUM(val3) totfrom datagroup by grouping sets ((val1, val2),());
我怀疑它会更有效,因为它直接指定要计算的级别。
http://sqlfiddle.com/#!4/8301d/3
CUBE和ROLLUP对于自动生成大量聚合级别(例如,维度层次结构中的每个级别)非常方便,如果您想从生成的大型CUBE中消除一小部分级别的子集,则可能会使用GROUPING
ID设置,但是GROUPING SET是专门用于指定特定聚合级别的。



