Tôi thấy khá dễ dàng hơn khi chỉ định các bộ chính xác mà tôi cần với mệnh đề 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) tot
from data
group by grouping sets ((val1, val2),());
Tôi nghi ngờ rằng nó hiệu quả hơn, vì nó chỉ định trực tiếp các cấp độ để tính toán.
http://sqlfiddle.com/#!4/8301d/3
CUBE và ROLLUP rất tiện lợi để tự động tạo số lượng lớn các cấp tổng hợp (ví dụ:mọi cấp trong hệ thống phân cấp thứ nguyên) và có thể có trường hợp sử dụng GROUPING ID nếu bạn muốn loại bỏ một tập hợp con nhỏ các cấp khỏi một CUBE lớn do CUBE tạo nhưng GROUPING SET được thiết kế chính xác để chỉ định các cấp độ tổng hợp cụ thể.