SQL ウィンドウ関数「ROW_NUMBER」「RANK」「LEAD」「LAG」って何ができるの?

こんにちは、阿久梨絵です!
SQL を使っていて「もっと柔軟に分析したいな…」と思ったこと、ありませんか?
そんなときに頼れるのが、ウィンドウ関数(Window Functions)。
今回はSQLのウィンドウ関数って、実務で使うと「なるほど!」が多いんです。
実務でよく使う関数を、わかりやすく整理してみました。

ウィンドウ関数って何?

通常の集計関数(SUM, AVGなど)は「グループ単位」でしか使えません。
でもウィンドウ関数なら、行ごとの集計や順位付けができるんです。

たとえば…

関数できること
ROW_NUMBER()行に連番を振る
RANK()順位をつける(同順位あり)
LEAD()次の行の値を参照
LAG()前の行の値を参照

これだけで「時系列分析」「ランキング」「前後比較」などが一気に楽になります。

実務での使い方(例)

① 売上ランキングを出す

SELECT
customer_id,
sales,
RANK() OVER (ORDER BY sales DESC) AS sales_rank
FROM sales_data;
売上順に順位をつける。営業成績の可視化に◎

② 前月比を出す

SELECT
month,
sales,
LAG(sales) OVER (ORDER BY month) AS prev_month_sales,
sales – LAG(sales) OVER (ORDER BY month) AS diff
FROM monthly_sales;

前月との比較が一発で。経営レポートにも使えます📈

③ 最新データだけ抽出

SELECT * FROM (
SELECT
user_id,
login_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date DESC) AS rn
FROM logins
) t
WHERE rn = 1;

ユーザーごとの最新ログインを抽出。サポート業務にも便利

ウィンドウ関数の“使いどころ”

時系列データの比較:LAG/LEADで前後の動きが見える
ランキング処理:RANK/ROW_NUMBERで順位付け
最新・最古の抽出:ROW_NUMBERで絞り込み
グループ内での分析:PARTITION BYで柔軟な集計

「集計だけじゃ足りない…」という場面で、ウィンドウ関数は本領発揮します。

まとめ

ウィンドウ関数は、 SQL の中でも“分析寄り”の機能。
データ分析に強くなりたい
実務でのレポート精度を上げたい
面接で「SQL得意です」と言いたい

そんな方にこそ、ぜひ使ってほしい機能です。
まずは「ROW_NUMBER」「RANK」「LAG」「LEAD」から試してみてくださいね。
阿久梨絵でした!

上部へスクロール
Verified by MonsterInsights