対象者: 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、または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