TechBridge

Window Function 완전 정복 — ROW_NUMBER · RANK · LAG · LEAD · PARTITION BY

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. ROW_NUMBER()와 RANK()의 차이로 올바른 것은?
💡 RANK()는 동점인 행에 같은 순위를 부여하고, 그 다음 순위는 건너뜁니다. 예: 1, 1, 3, 4. ROW_NUMBER()는 동점 여부와 관계없이 항상 고유한 순번을 부여합니다.
Q2. LAG(amount, 2, 0) OVER (ORDER BY month)에서 두 번째 인자 2의 의미는?
💡 LAG(expr, offset, default)에서 두 번째 인자는 몇 행 이전을 참조할지 지정합니다. LAG(amount, 2, 0)은 2행 이전의 amount 값을 가져오며, 해당 행이 없으면 기본값 0을 반환합니다.
Q3. LAST_VALUE()를 사용할 때 반드시 명시해야 하는 프레임 설정은?
💡 LAST_VALUE()의 기본 프레임은 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW로, 마지막 값이 아닌 현재까지의 마지막 값을 반환합니다. 전체 윈도우의 마지막 값을 얻으려면 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING을 명시해야 합니다.
Q4. 윈도우 함수를 WHERE 절에서 직접 사용하면 어떻게 되는가?
💡 윈도우 함수는 SELECT 목록과 ORDER BY 절에서만 사용할 수 있습니다. WHERE, HAVING, GROUP BY에서는 사용할 수 없으며 오류가 발생합니다. 해결책은 CTE나 서브쿼리로 감싸는 것입니다.
Q5. PostgreSQL에서만 지원되는 윈도우 함수 관련 기능은?
💡 FILTER (WHERE ...) 절은 PostgreSQL의 고유 기능으로, 집계 윈도우 함수에 조건을 추가할 수 있습니다. 예: COUNT(*) FILTER (WHERE amount > 500000) OVER (PARTITION BY dept). MySQL은 이 기능을 지원하지 않습니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.