ROLLUP é uma função que se estende a cláusula GROUP BY para retornar uma linha que contém um subtotal para cada grupo de linhas, além de uma linha que contém um total geral para todos os grupos.
No exemplo abaixo estamos realizando uma consulta para trazer os resultados das equipes de vendas, agrupando por equipe e vendedor
SELECT equipe
,vendedor
,SUM(valor) total
FROM vendas
WHERE equipe in (1,2)
GROUP BY equipe,vendedor
ORDER BY 1,2
EQUIPE VENDEDOR TOTAL
1 1 João 217,6
2 1 Pedro 2459,2
3 1 José 649,6
4 2 Tiago 542,4
5 2 Paulo 217,6
Porém, é possível continuar mostrando os resultados de cada vendedor da equipe e ainda mostrar a soma da equipe.
Observe que agora a cláusula group by contem apenas a coluna equipe e utilizamos ROLLUP para as colunas equipe e vendedor:
SELECT equipe
,vendedor
,SUM(valor) total
FROM vendas
WHERE equipe in (1,2)
GROUP BY equipe, ROLLUP(equipe,vendedor)
ORDER BY 1,2
EQUIPE VENDEDOR TOTAL
1 1 João 217,6
2 1 Pedro 2459,2
3 1 José 649,6
4 1 3326,4
5 1 3326,4
6 2 Tiago 542,4
7 2 Paulo 217,6
8 2 760
9 2 760
Observe ainda que existem colunas duplicadas para cada equipe, é possível eliminar essas colunas duplicadas utilizando a função GROUP_ID()
SELECT equipe
,vendedor
,GROUP_ID()
,SUM(valor) total
FROM vendas
WHERE equipe in (1,2)
GROUP BY equipe, ROLLUP(equipe,vendedor)
HAVING GROUP_ID() = 0
ORDER BY 1,2
EQUIPE VENDEDOR GROUP_ID() TOTAL
1 1 João 0 217,6
2 1 Pedro 0 2459,2
3 1 José 0 649,6
4 1 0 3326,4
5 2 Tiago 0 542,4
6 2 Paulo 0 217,6
7 2 0 760
Nenhum comentário:
Postar um comentário