積(Transact-SQL)

対象者: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL 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 はデフォルト値です。

独特

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