O GROUP BY ROLLUP
é um modificador usado com o comando SQL GROUP BY
, que permite adicionar subtotais em vários níveis em um conjunto de resultados. É uma extensão do GROUP BY convencional e ajuda na geração de relatórios que requerem uma análise em níveis hierárquicos.
Sintaxe
A sintaxe básica do GROUP BY ROLLUP
é como segue:
SELECT coluna1, coluna2, ..., aggregate_function(colunaN)
FROM tabela
GROUP BY ROLLUP (coluna1, coluna2, ...);
Exemplo Prático
Vamos considerar uma tabela vendas
que contém informações sobre as vendas de produtos em diferentes regiões e categorias.
Tabela vendas
ID_VENDA | REGIÃO | CATEGORIA | VALOR_VENDA |
---|---|---|---|
1 | Norte | Eletrônicos | 100 |
2 | Sul | Livros | 50 |
3 | Norte | Livros | 30 |
… | … | … | … |
Query com ROLLUP
Podemos usar o ROLLUP
para calcular os totais de vendas por região, categoria, e um total geral.
SELECT REGIÃO, CATEGORIA, SUM(VALOR_VENDA) AS TOTAL_VENDAS
FROM vendas
GROUP BY ROLLUP (REGIÃO, CATEGORIA);
Resultado
REGIÃO | CATEGORIA | TOTAL_VENDAS |
---|---|---|
Norte | Eletrônicos | 100 |
Norte | Livros | 30 |
Norte | NULL | 130 |
Sul | Livros | 50 |
Sul | NULL | 50 |
NULL | NULL | 180 |
Neste resultado, as linhas com NULL
representam os subtotais para as diferentes combinações de REGIÃO e CATEGORIA.
Utilizando NVL para Substituir NULL
Para melhorar a legibilidade do resultado e tornar os subtotais mais claros, podemos utilizar a função NVL
para substituir os valores NULL
por uma string como “TOTAL”.
Query com ROLLUP e NVL
SELECT NVL(REGIÃO, 'TOTAL') AS REGIÃO,
NVL(CATEGORIA, 'TOTAL') AS CATEGORIA,
SUM(VALOR_VENDA) AS TOTAL_VENDAS
FROM vendas
GROUP BY ROLLUP (REGIÃO, CATEGORIA);
Resultado
REGIÃO | CATEGORIA | TOTAL_VENDAS |
---|---|---|
Norte | Eletrônicos | 100 |
Norte | Livros | 30 |
Norte | TOTAL | 130 |
Sul | Livros | 50 |
Sul | TOTAL | 50 |
TOTAL | TOTAL | 180 |
Agora, o resultado é mais legível, com a palavra “TOTAL” indicando os subtotais para as diferentes combinações de REGIÃO e CATEGORIA.