Partilhar via


COMPUTE (Transact-SQL)

Gera totais que são exibidos como colunas de resumo adicionais no fim do conjunto de resultados. Quando usado com BY, a cláusula COMPUTE gera quebras de controle e subtotais no conjunto de resultados. Você pode especificar COMPUTE BY e COMPUTE na mesma consulta.

Observação importanteImportante

Esse recurso será removido na próxima versão do Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam. Use ROLLUP em vez disso. Para obter mais informações, consulte GROUP BY (Transact-SQL).

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe


[ COMPUTE 
    { { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM } 
    ( expression ) } [ ,...n ] 
    [ BY expression [ ,...n ] ] 
]

Argumentos

  • AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
    Especifica a agregação a ser executada. Essas funções de agregação de linha são usadas com a cláusula COMPUTE.

    Função de agregação de linha

    Resultado

    AVG

    Média dos valores na expressão numérica

    COUNT

    Número de linhas selecionadas

    MAX

    Valor mais alto na expressão

    MIN

    Valor mais baixo na expressão

    STDEV

    Desvio padrão estatístico para todos os valores da expressão

    STDEVP

    Desvio padrão estatístico para a população de todos os valores da expressão

    SUM

    Total dos valores na expressão numérica

    VAR

    Variação estatística para todos os valores da expressão

    VARP

    Variação estatística para a população de todos os valores da expressão

    Não há nenhum equivalente a COUNT (*). Para localizar as informações de resumo produzidas por GROUP BY e COUNT (*), use uma cláusula COMPUTE sem BY.

    Essas funções ignoram valores nulos.

    A palavra-chave DISTINCT não é permitida com funções de agregação de linha quando elas são especificadas com a cláusula COMPUTE.

    Ao adicionar ou calcular a média de dados inteiros, o Mecanismo de banco de dados do SQL Server trata o resultado como um valor int, mesmo que o tipo de dados da coluna seja smallint ou tinyint. Para obter mais informações sobre os tipos de retorno de dados adicionados ou de média de dados, consulte SUM (Transact-SQL) e AVG (Transact-SQL).

    ObservaçãoObservação

    Para reduzir a chance de erros de estouro nos programas ODBC e DB-Library, faça todas as declarações de variáveis para os resultados das medias ou somas do tipo de dados int.

  • expression
    Uma Expressões (Transact-SQL), como o nome de uma coluna na qual o cálculo é realizado. A expression deve ser exibida na lista de seleção e deve ser especificada exatamente como uma das expressões da lista. Um alias de coluna especificado na lista de seleção não pode ser usado dentro da expression.

    ObservaçãoObservação

    Os tipos de dados ntext, text ou image não podem ser especificados em uma cláusula COMPUTE ou COMPUTE BY.

  • BY expression
    Gera quebras de controle e subtotais no conjunto de resultados. expression é uma cópia idêntica de uma order_by_expression na cláusula ORDER BY associada. Normalmente, é um nome de coluna ou alias de coluna. Várias expressões podem ser especificadas. A listagem de várias expressões depois de BY quebra um grupo em subgrupos e aplica a função de agregação a cada nível do agrupamento.

    Se você usar COMPUTE BY, também deverá usar uma cláusula ORDER BY. As expressões devem ser iguais ou ser um subconjunto daquelas listadas depois de ORDER BY e devem estar na mesma sequência. Por exemplo, se a cláusula ORDER BY for ORDER BY a, b, c,a cláusula COMPUTE poderá ser qualquer uma das seguintes ou todas:

    COMPUTE BY a, b, c
    COMPUTE BY a, b
    COMPUTE BY a
    
    ObservaçãoObservação

    Em uma declaração SELECT com uma cláusula COMPUTE, a ordem das colunas na lista de seleção substitui a ordem das funções de agregação na cláusula COMPUTE. Os programadores de ODBC e DB-Library devem conhecer esse requisito de ordem para colocar os resultados da função de agregação no lugar correto.

Não é possível usar COMPUTE em uma instrução SELECT INTO porque as instruções que incluem COMPUTE geram tabelas, e seus resultados de resumo não são armazenados no banco de dados. Portanto, qualquer cálculo produzido por COMPUTE não é exibido na nova tabela criada com a instrução SELECT INTO.

Você não pode usar a cláusula COMPUTE quando a instrução SELECT fizer parte de uma instrução DECLARE CURSOR.

Exemplos

A. Usando COMPUTE em consulta para retornar totais

No exemplo a seguir, a instrução SELECT usa uma cláusula COMPUTE simples para produzir um total da soma de SubTotal e TotalDue da tabela SalesOrderHeader.

USE AdventureWorks2008R2;
GO
SELECT CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = 35
ORDER BY OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue);

B. Usando COMPUTE em consulta para retornar totais

No exemplo a seguir, a instrução SELECT usa uma cláusula COMPUTE para produzir totais por vendedor da soma de SubTotal e TotalDue da tabela SalesOrderHeader.

USE AdventureWorks2008R2;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;