累積合計と移動平均
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フィードバックを取得できます。ローカル設定は不要です。