次の方法で共有


PRODUCT (Transact-SQL)

適用対象:: SQL Server 2025 (17.x) プレビュー Azure SQL DatabaseAzure Synapse AnalyticsSQL データベース

式内のすべての値、または DISTINCT 値のみの PRODUCT を返します。 数値列でのみ使用します。 NULL 値は無視されます。

Transact-SQL 構文表記規則

構文

集計関数の構文。

PRODUCT ( [ ALL | DISTINCT ] expression )

分析関数の構文。

PRODUCT ( [ ALL ] expression) OVER ( [ PARTITION BY clause ] ORDER BY clause)

論争

すべての

集計関数をすべての値に適用します。 ALL が既定値です。

個別

PRODUCT が一意の値の PRODUCT を返すように指定します。

定数、列、または関数、および算術演算子、ビット演算子、および文字列演算子の任意の組み合わせ。 expression は、 ビット データ型を除く、正確な数値データ型または近似数値データ型カテゴリの式です。 集計関数とサブクエリは許可されません。 詳細については、「式の」を参照してください。

OVER ( [ PARTITION BY 句 ] ORDER BY )

関数が適用される前の行セットのパーティション分割と順序を決定します。

PARTITION BY 句は、FROM 句によって生成された結果セットを、関数が適用されるパーティションに分割します。 指定しない場合、関数ではクエリ結果セットのすべての行を 1 つのグループとして扱います。

ORDER BY 句は、操作が実行される論理的な順序を決定します。 必須。 詳細については、 OVER 句を参照してください。

戻り値の型

最も正確な データ型のすべての 値の積を返します。

式の結果 戻り値の型
tinyint int
smallint (スモールイント) int
int int
ビギント ビギント
decimal category (p, s) If (s == 0): decimal(38, 0) Else: decimal(38, 6)
moneysmallmoney カテゴリ お金
floatreal カテゴリ 浮く

注釈

PRODUCT は、 OVER 句と ORDER BY 句なしで使用する場合の決定論的関数です。 OVER句と ORDER BY 句で指定した場合は、非決定的です。 詳細については、「決定的関数と非決定的関数」を参照してください。

例示

この記事のコード サンプルでは、AdventureWorks2022 または AdventureWorksDW2022 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクト ホーム ページからダウンロードできます。

A。 行を乗算する

次の例は、PRODUCT 関数の使用を示しています

SELECT PRODUCT(UnitPrice) AS ProductOfPrices
FROM Purchasing.PurchaseOrderDetail
WHERE ModifiedDate <= '2002-05-24'
GROUP BY ProductId;

次に結果セットの一部を示します。

ProductOfPrices
----------
2526.2435
41.916
3251.9077
21656.2655
40703.3993
4785336.3939
11432159532.8367
5898056095.7678

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