você está aqui: Home  → Colunistas  →  Bancos de Dados Livres

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!

Sobre o autor

Luiz Paulo de Oliveira Santos teve seu primeiro contato com computadores em 1984, estudou BASIC para equipamentos de 8 bits (ZX-81 e Apple 2), em 1985 com o ambiente de 16 bits, e em 1988 com o ambiente de 32 bits. Em 1993 foi um dos primeiros Brasileiros a ter contato com o VBK que em 1995 se tornou o Delphi. Graduou em Tecnologia Em Processamento de Dados, cursou especialização em Análise de Sistemas e atualmente é graduando em Ciências Jurídicas. Atua como analista de suporte de redes da Universidade Metodista de Piracicaba, é editor da revista DB Freemagazine (uma revista gratuíta focada exclusivamente para bancos de dados Cliente/Servidor) e professor nas Faculdades Integradas Einstein de Limeira no curso de Tecnologia em Sistemas de Informação. Tem experiência nas áreas: Sistemas de Computação, Redes e Teleprocessamento de Dados, Bancos de Dados cliente-servidor e SQL. É autor do livro Firebird - Dicas de Segurança, publicado pela Editora Ciência Moderna.

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna