SQL Server GROUPING SETS

Summary: neste tutorial, você aprenderá como usar o SQL Server GROUPING SETS para gerar múltiplos conjuntos de agrupamento.

Configurar uma tabela de resumo de vendas

Vamos criar uma nova tabela chamada sales.sales_summary para a demonstração.

Code language: SQL (Structured Query Language) (sql)

Nesta consulta, recuperamos os dados de quantidade de vendas por marca e categoria e povoamo-los na tabela sales.sales_summary> tabela.

A seguinte consulta retorna dados da tabela sales.sales_summary tabela:

Code language: SQL (Structured Query Language) (sql)

A começar com SQL Server GROUPING SETS.

Por definição, um conjunto de agrupamento é um grupo de colunas pelo qual você agrupa. Tipicamente, uma única consulta com um agregado define um único conjunto de agrupamento.

Por exemplo, a consulta seguinte define um conjunto de agrupamento que inclui marca e categoria que é denotado como (brand, category). A consulta retorna o valor das vendas agrupadas por marca e categoria:

Code language: SQL (Structured Query Language) (sql)

A consulta seguinte retorna o valor das vendas agrupadas por marca. Define um conjunto de agrupamentos (brand):

Code language: SQL (Structured Query Language) (sql)

A consulta seguinte retorna o valor de vendas por categoria. Define um conjunto de agrupamento (category):

Code language: SQL (Structured Query Language) (sql)

A consulta seguinte define um conjunto de agrupamento vazio (). Ela retorna o valor de vendas para todas as marcas e categorias.

Code language: SQL (Structured Query Language) (sql)

As quatro consultas acima retornam quatro conjuntos de resultados com quatro conjuntos de agrupamento:

Code language: SQL (Structured Query Language) (sql)

Para obter um conjunto de resultados unificados com os dados agregados para todos os conjuntos de agrupamento, você pode usar o operador UNION ALL.

Porque UNION ALL operador requer que todos os conjuntos de resultados tenham o mesmo número de colunas, você precisa adicionar NULL à lista de seleção para as consultas assim:

Code language: SQL (Structured Query Language) (sql)

A consulta gerou um único resultado com os agregados para todos os conjuntos de agrupamentos como esperávamos.

No entanto, ela tem dois grandes problemas:

  1. A consulta é bastante longa.
  2. A consulta é lenta porque o SQL Server precisa executar quatro subconsultas e combina os conjuntos de resultados em uma única.

Para corrigir estes problemas, o SQL Server fornece uma subcláusula da cláusula GROUP BY chamada GROUPING SETS.

A GROUPING SETS define múltiplos conjuntos de agrupamentos na mesma consulta. O seguinte mostra a sintaxe geral da consulta GROUPING SETS:

Code language: SQL (Structured Query Language) (sql)

Esta consulta cria quatro conjuntos de agrupamento:

Code language: SQL (Structured Query Language) (sql)

Pode usar isto GROUPING SETS para reescrever a consulta que obtém os dados de vendas da seguinte forma:

Code language: SQL (Structured Query Language) (sql)

Como pode ver, a consulta produz o mesmo resultado que a que usa o operador UNION ALL. No entanto, esta consulta é muito mais legível e, claro, mais eficiente.

Função GRUPO

A função GROUPING indica se uma coluna especificada em uma cláusula GROUP BY está agregada ou não. Ela retorna 1 para agregada ou 0 para não agregada no conjunto de resultados.

Veja o seguinte exemplo de consulta:

Code language: SQL (Structured Query Language) (sql)

O valor na coluna grouping_brand indica que a linha está agregada ou não, 1 significa que o valor da venda está agregado por marca, 0 significa que o valor da venda não está agregado por marca. O mesmo conceito é aplicado à coluna grouping_category.

Neste tutorial, você aprendeu como gerar múltiplos conjuntos de agrupamento em uma consulta usando o SQL Server GROUPING SETS.

.

Deixe uma resposta

O seu endereço de email não será publicado.