対象者: 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 はデフォルト値です。
独特
PRODUCTが一意値の積を返すことを指定します。
expression
定数、列、または関数、および算術演算子、ビット演算子、および文字列演算子の任意の組み合わせ。 expression は、 ビット データ型を除く、正確な数値データ型または近似数値データ型カテゴリの式です。 集計関数とサブクエリは許可されません。 詳細については、「式の」を参照してください。
オーバー([ partition_by_clause ][ order_by_clause ])
関数が適用される前の行セットのパーティション分割と順序を決定します。
partition_by_clause は、 FROM 句によって生成された結果セットを、関数が適用されるパーティションに分割します。 指定しない場合、関数ではクエリ結果セットのすべての行を 1 つのグループとして扱います。
order_by_clause 操作が実行される論理的順序を決定します。 詳細については、「 SELECT - OVER 句」を参照してください。
戻り値の型
最も正確な 式 データ型のすべての 式 値の積を返します。
| 式の結果 | 戻り値の型 |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| 小数 圏(p, s) |
sが0なら、10進(38, 0)で、そうでなければ10進(38, 6) |
| money と smallmoney カテゴリ | money |
| float と real カテゴリ | float |
Remarks
Azure SQL Managed Instance における PRODUCT のサポートは Azure SQL Managed InstanceAUTD に限定されています。
PRODUCT は、 OVER 句と ORDER BY 句なしで使用する場合の決定論的関数です。
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 句を使用する
以下の例では、OVER節付きのPRODUCT関数を用いて、仮想的な金融商品の収益率を提供します。 データは 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