0Pricing
SQL Academy · レッスン

OVER、PARTITION BY、ORDER BY

ウィンドウ関数のモデルを理解します。OVER、PARTITION BY(グループ化)、ORDER BY(ソート)と、GROUP BYとの違いを学びます。

「OVER、PARTITION BY、ORDER BY」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

ウィンドウ関数とは

ウィンドウ関数は、現在の行に関連する行の集合を対象に値を計算します。GROUP BYのように結果をまとめることはありません。すべての行を保持しながら、集計列も取得できます。

基本例

テーブル全体の注文合計の平均値を、すべての行に表示します。

SELECT id, total,
       AVG(total) OVER () AS avg_total
FROM orders;

OVER句

OVER (...)句でウィンドウを定義します。空の括弧は「結果セット全体」を意味します。

SELECT id, total,
       SUM(total) OVER () AS grand_total
FROM orders;

PARTITION BY:ウィンドウをグループ化

GROUP BYと似ていますが、行はまとめられません。

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;

-- Every order keeps its row; user_total is the same for all of one user's orders.

ウィンドウ内のORDER BY

OVER内のORDER BYで、累計などの計算に使う行の順序を定義します。

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;

-- Running total per user, ordered by date.

ウィンドウ関数とGROUP BY

並べて比較してみましょう。

-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id)
FROM orders;

行ごとに異なるフレーム

「フレーム」とは、関数が参照するパーティション内の行の集合です。ORDER BYを指定した場合のデフォルトのフレームは「先頭の行から現在の行まで」です。これによって累計を計算できます。

名前付きウィンドウ

複数の関数で同じウィンドウを共有する場合は、1回だけ名前を付けます。

SELECT id, user_id, total,
       SUM(total) OVER w AS running_sum,
       AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);

ほとんどの集計関数はウィンドウ関数として使える

COUNT、SUM、AVG、MIN、MAXはすべてウィンドウ上で使用できます。専用のウィンドウ関数には、ROW_NUMBER、RANK、LAG/LEAD、NTILEなどがあります。

ウィンドウ関数はWHEREの後に実行される

論理的な実行順序は、FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMITです。そのため、WHEREによる絞り込みはウィンドウ関数の計算前に行われます。

パフォーマンスに関する考慮事項

ウィンドウ関数では、ソート(またはハッシュ)が必要です。大きなパーティションでは、(パーティション列、順序列)に対するインデックスによってソート処理を回避できます。

まとめ

ウィンドウ関数は、行ごとに集計値を追加します。

  • OVER () = 結果全体
  • PARTITION BY = ウィンドウのグループ化
  • ウィンドウ内のORDER BY = 累計などの計算を有効化

理解度チェック

SUM(x) OVER (PARTITION BY user_id)は何を計算しますか。

よくある質問

「OVER、PARTITION BY、ORDER BY」レッスンは無料ですか?

はい。「OVER、PARTITION BY、ORDER BY」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「OVER、PARTITION BY、ORDER BY」で何を学びますか?

ウィンドウ関数のモデルを理解します。OVER、PARTITION BY(グループ化)、ORDER BY(ソート)と、GROUP BYとの違いを学びます。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「OVER、PARTITION BY、ORDER BY」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. OVER、PARTITION BY、ORDER BY
  2. ROW_NUMBER、RANK、DENSE_RANK
  3. LAG、LEADと時系列パターン
  4. 累積合計と移動平均
← SQL Academyに戻る