Considere que o seguinte código PL/SQL fora executado em um banco de dados Oracle 11g:
DROP TABLE tabela1;
CREATE TABLE tabela1 (
fato_1_id NUMBER NOT NULL,
fato_2_id NUMBER NOT NULL,
fato_3_id NUMBER NOT NULL,
fato_4_id NUMBER NOT NULL,
valor_vendas NUMBER(10,2) NOT NULL
);
INSERT INTO tabela1
SELECT TRUNC(DBMS_RANDOM.value(low => 1,
high => 3)) AS fato_1_id,
TRUNC(DBMS_RANDOM.value(low => 1,
high => 6)) AS fato_2_id,
TRUNC(DBMS_RANDOM.value(low => 1,
high => 11)) AS fato_3_id,
TRUNC(DBMS_RANDOM.value(low => 1,
high => 11)) AS fato_4_id,
ROUND(DBMS_RANDOM.value(low => 1,
high => 100), 2) AS valor_vendas
FROM dual
CONNECT BY level <= 1000;
COMMIT;
Considere a seguinte consulta:
SELECT fato_1_id,
fato_2_id,
SUM(valor_vendas) AS valor_vendas,
GROUPING_ID(fato_1_id, fato_2_id) AS
g_id,
GROUP_ID() AS g2_id
FROM tabela1
GROUP BY GROUPING SETS(fato_1_id, CUBE
(fato_1_id, fato_2_id))
HAVING GROUP_ID() = 0
ORDER BY fato_1_id, fato_2_id;
A quantidade de registros produzidos por esta consulta com g_id = 1 (somente estes) é de: