产品(Transact-SQL)

适用于: SQL Server 2025 (17.x) Azure SQL Database 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
十进制 范畴 (ps 如果 s0则小数(38, 0);否则 , 小数(38, 6)
money 和 smallmoney 类别 money
floatreal category float

Remarks

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

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

Examples

本文中的代码示例使用 AdventureWorks2025AdventureWorksDW2025 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

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