ROLLUP: Função no Banco de Dados Oracle
ROLLUP é uma função que permite uma instrução Select calcule vários níveis de subtotais através de um grupo especificado (Função que totaliza a função de Group).
ROLLUP é uma função que permite uma instrução Select calcule vários níveis de subtotais através de um grupo especificado (Função que totaliza a função de Group). Está função calcula também um total geral. Rollup é uma extensão simples para a cláusula Group by, sua sintaxe é extremamente fácil de usar. Não podemos esquecer-nos de pensar em eficiência, a função é altamente eficiente, acrescentando sobrecarga mínima para uma consulta.
Quando usar o Rollup?
Usa a Função Rollup em SQL que envolvem subtotais. É muito útil para totalizar datas, cadastros e suas movimentações, entre outros.
SELECT Campo01, Campo02, sum(Campo03)
GROUP BY ROLLUP(Campo01, Campo02)
Abaixo iremos explicar como faremos e como identificar que precisaremos utilizar a função, pois muitas vezes deixamos esta função para o relatório ou mesmo para a tela do programa.
Tenho uma tabela e preciso que a mesma me traga o total de pesagens por data e bloco totalizando a quantidade de peso. Antes da dica faria um select unia com outro select conforme o exemplo abaixo.
SELECT DT_MOV, COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
FROM OS_PESAGENS
WHERE COD_EMPRESA = 1
AND SAFRA       = 2011
GROUP BY DT_MOV, COD_BLOCO
SELECT DT_MOV, 99999999 COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
GROUP BY DT_MOV
ORDER BY DT_MOV, COD_BLOCO
Abaixo está o exemplo com a Função Rollup, o SQL fica mais simples e mais eficiente.
GROUP BY ROLLUP(DT_MOV, COD_BLOCO)
Neste exemplo apresentamos a Função Rollup com apenas 2 níveis, agora iremos aumentar um nível, pois ainda não temos um total geral, apenas subtotais.
SELECT COD_EMPRESA, DT_MOV, COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
GROUP BY COD_EMPRESA, ROLLUP(DT_MOV, COD_BLOCO)
COD_BLOCO
3349829620
Concluímos que a função ROLLUP, é fácil de usar, altamente eficiente e com sobrecarga mínima para um consulta, não esquecendo que quando usarmos Group by não há necessidade de usar Order by (Tunning).