できます GROUP BY SalesOrderID
を使用します 。違いは、GROUP BYを使用すると、GROUPBYに含まれていない列の集計値のみを取得できることです。
対照的に、GROUP BYの代わりにウィンドウ集計関数を使用すると、集計値と非集計値の両方を取得できます。つまり、サンプルクエリではこれを行っていませんが、両方の個別のOrderQty
を取得できます。 同じSalesOrderID
のグループの値とその合計、カウント、平均など s。
これは、ウィンドウ化された集計が優れている理由の実際的な例です。すべての値の合計の何パーセントかを計算する必要があるとします。ウィンドウ化された集計がない場合は、最初に集計値のリストを取得してから、元の行セットに結合する必要があります。つまり、次のようになります。
SELECT
orig.[Partition],
orig.Value,
orig.Value * 100.0 / agg.TotalValue AS ValuePercent
FROM OriginalRowset orig
INNER JOIN (
SELECT
[Partition],
SUM(Value) AS TotalValue
FROM OriginalRowset
GROUP BY [Partition]
) agg ON orig.[Partition] = agg.[Partition]
次に、ウィンドウ化された集計で同じことを行う方法を見てください。
SELECT
[Partition],
Value,
Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
FROM OriginalRowset orig
はるかに簡単でクリーンですね。