SQL Academy · 강의

누적 합계와 이동 평균

SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...)으로 누적 합계와 이동 평균을 계산합니다.

레슨 4/413개 단계

누적 합계와 이동 평균은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 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일 이동 평균을 제공하는 프레임 절은 무엇인가요?

무료로 시작

AI 튜터와 함께 SQL을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
46
레슨
183

자주 묻는 질문

“누적 합계와 이동 평균” 강의는 무료인가요?

네 — “누적 합계와 이동 평균” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“누적 합계와 이동 평균”에서 뭘 배우나요?

SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...)으로 누적 합계와 이동 평균을 계산합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 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(으)로 돌아가기