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:
- A consulta é bastante longa.
- 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
.
.