Compartilhar via


PRODUCT (Transact-SQL)

Aplica-se a:Applies to: SQL Server 2025 (17.x) Preview Azure SQL DatabaseAzure Synapse AnalyticsSQL database in Microsoft Fabric

Retorna o PRODUTO de todos os valores, ou apenas os valores DISTINCT, na expressão. Use somente com colunas numéricas. Valores nulos são ignorados.

Convenções de sintaxe de Transact-SQL

Sintaxe

Sintaxe de função de agregação.

PRODUCT ( [ ALL | DISTINCT ] expression )

Sintaxe de função analítica.

PRODUCT ( [ ALL ] expression) OVER ( [ PARTITION BY clause ] ORDER BY clause)

Argumentos

TODOS

Aplica a função de agregação a todos os valores. ALL é o padrão.

DISTINÇÃO

Especifica que PRODUCT retorna o PRODUTO de valores exclusivos.

expressão

Uma constante, coluna ou função e qualquer combinação de operadores aritméticos, bit a bits e cadeia de caracteres. expressão é uma expressão da categoria exata de tipo de dados numérico ou numérico aproximado, exceto para o tipo de dados de bit . Funções e subconsultas de agregação não são permitidas. Para obter mais informações, consulte Expressions.

OVER ( [ cláusula PARTITION BY ] Cláusula ORDER BY )

Determina o particionamento e a ordenação de um conjunto de linhas antes que a função seja aplicada.

PARTITION BY a cláusula divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada. Se não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo.

ORDER BY A cláusula determina a ordem lógica na qual a operação é executada. Obrigatório Para obter mais informações, consulte a cláusula OVER.

Tipos de retorno

Retorna o produto de todos os valores de expressão no tipo de dados de expressão mais preciso.

Resultado da expressão Tipo de retorno
tinyint int
smallint int
int int
bigint bigint
categoria decimal (p, s) Se (s == 0): decimal(38, 0) Else: decimal(38, 6)
money e smallmoney category dinheiro
float e categoria real flutuar

Observações

PRODUCT é uma função determinística quando usada sem as OVER cláusulas e ORDER BY . É não determinístico quando especificado com as OVER cláusulas e ORDER BY . Para obter mais informações, confira Funções determinísticas e não determinísticas.

Exemplos

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2022 ou AdventureWorksDW2022, que você pode baixar na página inicial Microsoft SQL Server Samples and Community Projects.

Um. Multiplicar linhas juntas

Os exemplos a seguir mostram como usar a função PRODUCT

SELECT PRODUCT(UnitPrice) AS ProductOfPrices
FROM Purchasing.PurchaseOrderDetail
WHERE ModifiedDate <= '2002-05-24'
GROUP BY ProductId;

Este é um conjunto de resultados parcial.

ProductOfPrices
----------
2526.2435
41.916
3251.9077
21656.2655
40703.3993
4785336.3939
11432159532.8367
5898056095.7678

B. Usar a cláusula OVER

O exemplo a seguir usa a função PRODUCT com a cláusula OVER para fornecer uma taxa de retorno em instrumentos financeiros hipotéticos. Os dados são particionados por finInstrument.

SELECT finInstrument,
    PRODUCT(1 + rateOfReturn)
        OVER (PARTITION BY finInstrument) AS CompoundedReturn
FROM (
    VALUES (0.1626, 'instrumentA'),
           (0.0483, 'instrumentB'),
           (0.2689, 'instrumentC'),
           (-0.1944, 'instrumentA'),
           (0.2423, 'instrumentA'))
AS MyTable(rateOfReturn, finInstrument);

Veja aqui o conjunto de resultados.

finInstrument CompoundedReturn
------------- ---------------------------------------
instrumentA   1.163527
instrumentA   1.163527
instrumentA   1.163527
instrumentB   1.048300
instrumentC   1.268900