SQLでのROW OVER PARTITIONの使用方法


  1. パーティションごとの合計値の計算

例えば、以下のようなsalesテーブルがあるとします。

salesテーブル:
-----------------
date       | amount
-----------------
2022-01-01 | 100
2022-01-01 | 200
2022-01-02 | 150
2022-01-02 | 300

salesテーブルのamount列を日付ごとに合計したい場合、次のクエリを使用します。

SELECT date, amount, SUM(amount) OVER (PARTITION BY date) AS total_amount
FROM sales;

このクエリでは、PARTITION BY句を使用してdate列を指定し、日付ごとにamount列の合計値を計算しています。

  1. パーティション内の行の順序付け

次に、以下のようなordersテーブルがあるとします。

ordersテーブル:
----------------------
order_id | customer_id
----------------------
1        | 100
2        | 100
3        | 200
4        | 200

ordersテーブルのorder_id列をcustomer_idごとに昇順で順序付けしたい場合、次のクエリを使用します。

SELECT order_id, customer_id, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_id) AS row_number
FROM orders;

このクエリでは、PARTITION BY句を使用してcustomer_id列を指定し、ORDER BY句を使用してorder_id列で昇順に並べ替えています。ROW_NUMBER関数を使用することで、各パーティション内の行の順序を取得します。

以上が、ROW OVER PARTITIONの使用方法とコード例の一部です。実際の使用場面に応じて、他のウィンドウ関数や条件と組み合わせてさまざまな処理が可能です。