Pular para o conteúdo principal

GROUPING

ROLLUP e CUBE são modificadores do GROUP BY. Ambos calculam subtotais. O ROLLUP recebe uma lista ordenada de colunas, por exemplo (day, month, year), e calcula subtotais em cada nível da agregação e, depois, um total geral. O CUBE calcula subtotais para todas as combinações possíveis das colunas especificadas. O GROUPING identifica quais linhas retornadas por ROLLUP ou CUBE são linhas de superagregação e quais seriam retornadas por um GROUP BY sem modificadores. A função GROUPING recebe várias colunas como argumento e retorna uma máscara de bits.
  • 1 indica que uma linha retornada por um modificador ROLLUP ou CUBE no GROUP BY é um subtotal
  • 0 indica que uma linha retornada por ROLLUP ou CUBE não é um subtotal

GROUPING SETS

Por padrão, o modificador CUBE calcula subtotais para todas as combinações possíveis das colunas passadas para o CUBE. GROUPING SETS permite especificar quais combinações devem ser calculadas. Analisar dados hierárquicos é um bom caso de uso para os modificadores ROLLUP, CUBE e GROUPING SETS. O exemplo aqui é uma tabela que contém dados sobre qual distribuição Linux e qual versão dessa distribuição estão instaladas em dois datacenters. Pode ser útil visualizar os dados por distribuição, versão e local.

Carregar dados de exemplo

Consultas simples

Obtenha a contagem de servidores em cada data center por distribuição:

Comparando várias instruções GROUP BY com GROUPING SETS

Analisando os dados sem CUBE, ROLLUP ou GROUPING SETS:
A mesma informação usando GROUPING SETS:

Comparando CUBE com GROUPING SETS

O CUBE na próxima consulta, CUBE(datacenter,distro,version), fornece uma hierarquia que pode não fazer sentido. Não faz sentido analisar version entre as duas distribuições, já que Arch e RHEL não têm o mesmo ciclo de lançamentos nem os mesmos padrões de nomenclatura de versão. O exemplo de GROUPING SETS a seguir é mais apropriado, pois agrupa distro e version no mesmo conjunto.
A versão no exemplo acima pode não fazer sentido quando não está associada a uma distro. Se estivéssemos rastreando a versão do kernel, isso poderia fazer sentido, porque a versão do kernel pode estar associada a qualquer uma das distros. Usar GROUPING SETS, como no exemplo seguinte, pode ser uma opção melhor.
Última modificação em 2 de julho de 2026