SQL Server で SUM の集計範囲を制御する


SQL Server の SUM() OVER を使うと、明細行を残したまま合計値を表示できます。PARTITION BY を指定すれば、顧客ごとや分類ごとに集計範囲を分けることができます。

さらに ROWS 句を使うと、そのパーティション内で現在行を基準に、どの行までを SUM の対象にするかを指定できます。


たとえば、ROWS BETWEEN 2 PRECEDING AND CURRENT ROW と書くと、現在行と直前2行を合わせた、最大3行分が集計対象になります。

SUM(amount) OVER (
    PARTITION BY customer_id
    ORDER BY order_date
    ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
)

この例では、顧客ごとに注文日順で並べ、現在行を含む直近最大3件の金額を合計します。このような移動合計を出したいときに役立ちます。

また、2 PRECEDING の部分を UNBOUNDED PRECEDING に変えれば、パーティションの先頭行から現在行までの累計を出すことも可能です。

SUM(amount) OVER (
    PARTITION BY customer_id
    ORDER BY order_date
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)


ROWS 句を使うことで、移動合計や累計など、 用途に応じて集計範囲を柔軟にコントロールできます。

OVER 句 (Transact-SQL) - SQL Server | Microsoft Learn


HM

インプラス株式会社

このブログの人気の投稿

googleドライブの同期は、フォルダ選択ができました。

技術メモ「503 Service Unavailable」

なかなか消えない亀アイコン