Sumarizações com "GROUP BY" e "WITH ROLLUP"
Por Luiz Paulo de Oliveira Santos
Data de Publicação: 21 de Julho de 2008
A utilização de ferramentas OLAP (Online Analytical Processing) embutidas em aplicações comerciais está se tornando uma característica comum. Certamente ferramentas de geração de cubos de decisão são atraentes, fáceis de usar e disponibilizam acesso rápido a totais de colunas, com ou sem o cruzamento de dados.
Os cubos são empregados para tabular a informação, geralmente para impressão posterior. A idéia central é a sumarização de informações.
Um dos cubos mais completo e fácil de usar é o Fast Cube da Fast-Report. Certamente tais ferramentas possuem seus próprios algoritmos para efetuar as sumarizações, mas também podemos escrever nosso próprio SQL com totais.
O SQL implementa alguma facilidade para extração de dados sumarizados?
Alguns bancos SQL possuem a clausula WITH ROLLUP para o SELECT. Através do WITH ROLLUP pode-se conseguir totalizações de campos.
A clausula ROLLUP trabalha em conjunto com a clausula GROUP BY.
Supondo que tenhamos a seguinte tabela:
CREATE TABLE `PESSOAS` (
`SETOR` char(20) default NULL,
`NOME` char(50) default NULL,
`FALTAS` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Se na tabela acima executarmos o seguinte SELECT:
SELECT SETOR, SUM( FALTAS )
FROM `PESSOAS`
GROUP BY SETOR;
Teremos a totalização do número de faltas por setor, se quisermos o total geral das faltas no final do SELECT basta incluirmos a clausula WITH ROLLUP:
SELECT SETOR, SUM( FALTAS )
FROM `PESSOAS`
GROUP BY SETOR WITH ROLLUP;
Uma informação importante é que o WITH ROLLUP funciona também com agrupamentos encadeados, do tipo:
SELECT ... GROUP BY campo, campo, ... campo WITH ROLLUP;
Gerando totais campo à campo e um total geral final.
E antes que alguém questione se é possível substituir os NULLs que aparecem, por um título ou outra informação qualquer, adianto que certamente é possível, podemos fazer isso com COALESCE ou IFNULL, mas deixamos tal fato para outro artigo. Se quiser ver uma dica sobre NULL clique aqui.
Até a próxima!
Veja a relação completa dos artigos da Bancos de Dados Livres
Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS
Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.


