Usando GROUP BY com ROLLUP

Ao trabalharmos com T-SQL, nos deparamos com diversas necessidades de totalizadores, o que é geralmente alcançado por meio do uso da cláusula GROUP BY em nossa consultas. O que alguns não sabem, e eu descobri isso recentemente, é que essa cláusula possui diversas extensões que vieram para facilitar nossa vida em diversas situações.

Neste post de hoje, vou tentar demonstrar de forma prática como utilizar a extensão ROLLUP, seus conceitos de uso e aplicabilidade.

O operador ROLLUP, é uma extensão da cláusula GROUP BY. Além dele, existem ainda o CUBE e GROUPING SETS, porém, para não perdermos o foco, neste post de hoje, veremos apenas o ROLLUP. Vamos falar no conjunto geral, onde convier a igualdade entre as extensões, para aproveitar os conceitos.

Eu particularmente, acho interessante focar em apenas um dos operadores, para simplificar ao máximo o aprendizado, mas em breve, falaremos mais dos outros operadores.

GROUP BY

Bom. Antes de falarmos especificamente do operador ROLLUP, relembramos como funciona a cláusula GROUP BY. Essa cláusula, como muitos sabem, geralmente trabalha em conjunto com funções de agregação, como por exemplo SUM(), MAX(), MIN() e etc. Tais funções de agregação, neste exemplo, são utilizadas para obter-se somatórios, valor máximo e mínimo, respectivamente. Mais restritamente a função SUM(), retornará o total da soma de um determinado campo da nossa tabela.

Ok. Até ai, já sabemos. Então vejamos. Imagine a seguinte tabela:

Eu fiz diversas inserções nesta tabela, listando Nome do aluno, nome da matéria e em qual dia, ele tem aula, por exemplo:

Utilizando uma função de agregação, como por exemplo COUNT(), que retorna o número total de itens no agrupamento, teremos:

Consulta com GROUP BY simples:

O resultado será:

ROLLUP

Ao aplicarmos o operador ROLLUP, em nossa consulta anterior, teremos, além do total de alunos, por dia/matéria, teremos o total para cada grupo realizado, e ainda, um total geral da de todos os grupos, como mostrado a seguir:

Observe as colunas com retorno NULL. Temos três colunas de totais para cada grupo, e uma última, de total de todos os grupos.

Como utilizar o operador ROLLUP

Este tutorial, foi desenvolvido com base em uma banco de dados MySQL. Abaixo veremos como utilizar o operador em banco de dados MySQL e SQL Server. Veja.

Como utilizar o operador ROLLUP no MySQL

No MySQL, o operador ROLLUP, é utilizado logo após a cláusula GROUP BY, em conjunto com a cláusula WITH, como mostrado a seguir.

OBS: O MySQL, quando utilizando o operador, ele não permite o uso do ORDER BY na consulta.

Como utilizar o operador ROLLUP no SQL Server

No SQL Server, diferentemente do MySQL, o operador é utilizando como uma função, passando-se os campos relacionados, ao operador, como mostrado a seguir, além de se poder utilizar a cláusula ORDER BY:

No momento que estou escrevendo esse post, eu não estou com acesso ao banco de dados SQL server, mas deixo aqui, o link de referência.

https://technet.microsoft.com/pt-br/library/bb522495(v=sql.105).aspx

Bom, acredito que até aqui, já seja possível entender o funcionamento do operador. Em um próximo post, vamos falar um pouco mais dos demais operadores que citamos, que são os CUBE e GROUPING.

Fico por aqui. Um grande abraço. Até o próximo post.

Claudeci Goularte

Programador com mais de 11 anos de experiência, graduado em Análise e Desenvolvimento de Sistemas, e pós graduado em MBA em Arquitetura de Software. Sou Sócio fundador e administrador na empresa Kamoney Empreendimentos Digitais Ltda.

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *