适用于: SQL Server 2025 (17.x)
Azure SQL Database Azure
SQL Managed Instance
Azure Synapse Analytics
Warehouse in Microsoft Fabric
SQL database in Microsoft Fabric
该 PRODUCT 函数返回表达式中所有值的乘积,或仅 DISTINCT 返回这些值的乘积。 仅用于数值列。 忽略 Null 值。
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 示例数据库,可以从 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