Share via


Resumindo dados usando COMPUTE e COMPUTE BY

As cláusulas COMPUTE e COMPUTE BY são fornecidas para compatibilidade regressiva. Em vez disso, use os seguintes componentes:

Uma cláusula COMPUTE BY permite visualizar os detalhes e o resumo das linhas com uma instrução SELECT. Você pode calcular os valores resumidos de subgrupos, ou um valor resumido de todo o conjunto de resultados.

A cláusula COMPUTE usa as seguintes informações:

  • A palavra-chave opcional BY. Com isso, calcula o agregado de linha especificado por coluna.

  • Um nome de função de agregação de linha. Isso inclui SUM, AVG, MIN, MAX ou COUNT.

  • Uma coluna na qual será executada a função de agregação de linha.

Conjuntos de resultados gerados por COMPUTE

Os valores resumidos, gerados por COMPUTE, aparecem como conjuntos de resultados distintos nos resultados da consulta. Os resultados de uma consulta que incluem uma cláusula COMPUTE são como um relatório de control-break. Trata-se de um relatório cujos valores de resumo são controlados pelos agrupamentos ou quebras especificados. Você pode produzir valores resumidos para grupos e também calcular mais de uma função de agregação para o mesmo grupo.

Quando COMPUTE é especificada com a cláusula BY opcional, há dois conjuntos de resultados para cada grupo qualificado para SELECT:

  • O primeiro conjunto de resultados de cada grupo possui o conjunto de linhas de detalhe que contêm as informações da lista de seleção para aquele grupo.

  • O segundo conjunto de resultados de cada grupo possui uma linha que contém os subtotais das funções de agregação especificadas na cláusula COMPUTE daquele grupo.

Quando COMPUTE é especificada sem a cláusula BY opcional, há dois conjuntos de resultados para SELECT:

  • O primeiro conjunto de resultados de cada grupo tem todas as linhas de detalhe que contêm as informações da lista selecionada.

  • O segundo conjunto de resultados possui uma linha que contém os totais das funções de agregação especificadas na cláusula COMPUTE.

Exemplos que usam COMPUTE

A instrução SELECT seguinte usa uma cláusula simples COMPUTE para produzir o total principal dos preços unitários e descontos da tabela SalesOrderDetail:

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount);

A consulta seguinte adiciona a palavra-chave opcional BY à cláusula COMPUTE para produzir subtotais para todos os pedidos de vendas:

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount) BY SalesOrderID;

Os resultados dessa instrução SELECT retornam dois conjuntos de resultados para cada pedido de vendas. O primeiro conjunto de resultados de cada ordem de vendas possui um conjunto de linhas que contém as informações especificadas na lista selecionada. O segundo conjunto de resultados de cada pedido de vendas contém os subtotais das duas SUM funções da COMPUTE cláusula.

ObservaçãoObservação

Em alguns utilitários, como osql, o subtotal múltiplo ou resumos agregados totais aparecem como se cada subtotal fosse uma linha separada de um conjunto de resultados. Isso ocorre devido à forma pela qual o utilitário formata a saída; o subtotal ou o total de agregados são retornados em uma linha. Outros aplicativos, como SQL Server Management Studio, formatam vários agregados na mesma linha.

Comparando COMPUTE a GROUP BY

O seguinte resume as diferenças entre COMPUTE e GROUP BY:

  • GROUP BY produz um conjunto de resultados único. Há uma linha para cada grupo que contém apenas as colunas de agrupamento e funções de agregação que mostram a subagregação daquele grupo. A lista selecionada pode conter apenas as colunas de agrupamento e funções de agregação.

  • COMPUTE produz vários conjuntos de resultados. Um tipo de conjunto de resultado contém as linhas de detalhes de cada grupo que contêm as expressões da lista selecionada. O outro tipo de conjunto de resultados contém o subagregado de um grupo ou o agregado total da instrução SELECT. A lista selecionada pode conter outras expressões além das colunas de agrupamento ou funções de agregação. As funções de agregação são especificadas na cláusula COMPUTE; não na lista de seleção.

A consulta a seguir usa GROUP BY e funções de agregação. A consulta retorna um conjunto de resultados que tem uma linha por grupo que contém os subtotais de agregação daquele grupo:

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, SUM(UnitPrice), SUM(UnitPriceDiscount)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID;
ObservaçãoObservação

Você não poderá incluir tipos de dados ntext, text ou image em uma cláusula COMPUTE ou COMPUTE BY.

Consulte também

Referência

Conceitos