0Pricing
SQL Academy · レッスン

累積合計と移動平均

SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...)で累積合計と移動平均を計算します。

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

累計の基本

累計は、ウィンドウ内でORDER BYを指定したSUMです。フレーム句を指定しないため、デフォルトのフレームは「先頭の行から現在の行まで」になります。

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;

グループごとの累計

ユーザーごとに累計をリセットします。

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

移動平均

N日間の移動平均には、ROWSフレームを使用します。

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) AS avg_7d
FROM daily_revenue;

中央移動平均

7日間を中心としたウィンドウ(前3日、当日、後3日)です。

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
       ) AS avg_7d_centred
FROM daily_revenue;

累積分布

各日までに、全売上の何割に到達したかを求めます。

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day)
         / SUM(revenue) OVER ()  AS cum_share
FROM daily_revenue;

ROWSとRANGE

  • ROWS — 行を物理的に数えます(前後N行)
  • RANGE — 値の範囲を論理的に指定します(たとえば、日付の値に基づく7日間)
-- ROWS: 6 previous rows + this one (may skip dates with no data)
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)

-- RANGE: include any row with a day within '6 days' of the current row
AVG(revenue) OVER (ORDER BY day RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW)

累積最大値

各時点での、それまでの最高値を求めます。

SELECT day, total_users,
       MAX(total_users) OVER (ORDER BY day) AS peak_so_far
FROM daily_metrics;

累積件数

現在の行までに確認されたイベントの合計数です。

SELECT id, ts,
       COUNT(*) OVER (ORDER BY ts) AS events_so_far
FROM events;

異常の検出

当日の売上を移動平均の基準値と比較します。

SELECT day, revenue, avg_7d,
  CASE WHEN revenue < 0.5 * avg_7d THEN 'WARNING' ELSE 'OK' END AS status
FROM (
  SELECT day, revenue,
         AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING) AS avg_7d
  FROM daily_revenue
) sub;

最初のNULL

7行のウィンドウでは、最初の6行の平均がNULLになるか、一部の行だけを使った平均になります。これらを非表示にするか、不完全なウィンドウも有効として扱うかを決めてください。

パフォーマンス

累計集計では、パーティション内で順序付けされた入力が必要です。ORDER BY列に対するインデックスによって、ソートを回避できます。

まとめ

フレームによって、累計などの計算が可能になります。

  • ORDER BYを指定したデフォルトのフレーム = 「先頭から現在の行まで」
  • ROWS BETWEEN n PRECEDING AND CURRENT ROW = 移動ウィンドウ
  • ウィンドウ上のSUM/AVG/MAX = 累積値または移動値

理解度チェック

現在の行までの7日間の移動平均を計算するには、どのフレーム句を使いますか。

よくある質問

「累積合計と移動平均」レッスンは無料ですか?

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

「累積合計と移動平均」で何を学びますか?

SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...)で累積合計と移動平均を計算します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「累積合計と移動平均」レッスンにはどのくらい時間がかかりますか?

ほとんどの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に戻る