产品(Transact-SQL)

适用于: SQL Server 2025 (17.x) Azure SQL 数据库 AzureSQL Managed InstanceAzure Synapse AnalyticsWarehouse in Microsoft FabricSQL database in Microsoft Fabric

该 PRODUCT 函数返回表达式中所有值的乘积,或仅 DISTINCT 返回这些值的乘积。 仅用于数值列。 忽略 Null 值。

Transact-SQL 语法约定

Syntax

聚合函数语法:

PRODUCT ( [ ALL | DISTINCT ] expression )

分析函数语法:

PRODUCT ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )

Arguments

ALL

将聚合函数应用于所有值。 ALL 是默认值。

独特

指定返回 PRODUCT 唯一值的乘积。

expression

常量、列或函数,以及算术、按位和字符串运算符的任意组合。 表达式 是精确数值或近似数值数据类型类别的表达式,但 位 数据类型除外。 不允许聚合函数和子查询。 有关详细信息,请参阅 表达式。

OVER ([ partition_by_clause ] [ order_by_clause ] )

确定在应用函数之前行集的分区和排序。

partition_by_clause 将子句生成的 FROM 结果集划分为应用函数的分区。 如果未指定,则此函数将查询结果集的所有行视为单个组。

order_by_clause 确定执行操作的逻辑顺序。 有关详细信息,请参阅 SELECT - OVER 子句。

返回类型

返回最精确的 表达式 数据类型中所有 表达式 值的乘积。

表达式结果 返回类型
tinyint int
smallint int
int int
bigint bigint
十进制 范畴 (p, s) 如果 s 是 0, 则小数(38, 0);否则 , 小数(38, 6)
money 和 smallmoney 类别 money
float 和 real category float

Remarks

Azure SQL 托管实例的支持 PRODUCT 仅限于 Azure SQL 托管实例AUTD。

PRODUCT 在不使用 and OVERORDER BY 子句的情况下使用时,是确定性函数。 使用 and OVER 子句指定ORDER BY时,这是不确定的。 有关详细信息,请参阅确定性函数和不确定性函数。

Examples

本文中的代码示例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025示例数据库,您可以从 Azure Data SQL Samples Repository 的 GitHub 仓库下载。

A. 将行相乘

以下示例使用函数 PRODUCT :

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

结果集如下。

ProductOfPrices
----------
2526.2435
41.916
3251.9077
640559.8491
1469352.0378
222137708.073
11432159376.271
5898056028.2633
14030141.2883
2526.4194

B. 使用 OVER 子句

以下示例使用 PRODUCT 带有 OVER 子句的函数来提供假设金融工具的收益率。 数据按 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);

结果集如下。

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