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_VENDAREGIÃOCATEGORIAVALOR_VENDA
1NorteEletrônicos100
2SulLivros50
3NorteLivros30
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ÃOCATEGORIATOTAL_VENDAS
NorteEletrônicos100
NorteLivros30
NorteNULL130
SulLivros50
SulNULL50
NULLNULL180

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ÃOCATEGORIATOTAL_VENDAS
NorteEletrônicos100
NorteLivros30
NorteTOTAL130
SulLivros50
SulTOTAL50
TOTALTOTAL180

Agora, o resultado é mais legível, com a palavra “TOTAL” indicando os subtotais para as diferentes combinações de REGIÃO e CATEGORIA.

Sobre o autor

Pós graduado em Gestão de Projetos em Tecnologia da Informação pela UNIASSELVI.
Esposo e Pai, curto atividades ao ar livre (Bike, SUP, Natação, Caminhar, Brincar no campo)

Atua com Banco de Dados Oracle desde de 2007. Atualmente é DBA Senior na FLUIDATA Serviços em Banco de dados (www.fluidata.com.br)

Principais atividade Banco de dados:

Implementação, migração, gerenciamento e suporte a produtos Oracle (8i, 9i, 10g, 11g, 12c, 18c, 19c RAC), multiplataforma;
Implementação, migração, gerenciamento e suporte a produtos Microsoft SQL Server (2008 - 2019);
Implementação, migração, gerenciamento e suporte a produtos PostgreSQL (9.3 - 14);
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control;
Conversão de databases;
Standby database / Oracle Data Guard;

Certificações:

Oracle Cloud Infrastructure 2019 Certified Architect AssociateOracle Cloud Infrastructure 2019 Certified Architect Associate
Oracle Database 12c Administrator Certified ProfessionalOracle Database 12c Administrator Certified Professional
Exadata Database Machine Models X2-2 and X2-8 Technology Support SpecialistExadata Database Machine Models X2-2 and X2-8 Technology Support Specialist
Oracle Database 11g Support SpecialistOracle Database 11g Support Specialist
OCP 11g - Oracle Certified Professional AdministratorOCP 11g - Oracle Certified Professional Administrator
OPN Certified Specialist 10g - PartnerNetwork Certified SpecialistOPN Certified Specialist 10g - PartnerNetwork Certified Specialist
Oracle Database 10g Real Applications Clusters AdministratorCertified ExpertOracle Database 10g Real Applications Clusters AdministratorCertified Expert
Oracle Database 10g: Managing Oracle on Linux Certified ExpertOracle Database 10g: Managing Oracle on Linux Certified Expert
OCP 10g - Oracle Certified Professional AdministratorOCP 10g - Oracle Certified Professional Administrator

Principais atividades DEVOPS:

PHP
ASP.net
C#
Docker
Golang
C++
Delphi
Python
HTML5
JavaScript

Você também pode gostar: