GROUP BY와 차이
GROUP BY는 행을 줄입니다. 윈도우 함수는 행 수를 유지하면서 순위·누적 값을 옆 칸에 붙입니다.
SELECT name, score,
RANK() OVER (ORDER BY score DESC) AS rnk
FROM players;
OVER 절
ORDER BY: 창 안 정렬PARTITION BY: 그룹마다 창을 나눔
RANK() OVER (
PARTITION BY dept
ORDER BY score DESC
) AS dept_rank
RANK vs ROW_NUMBER
ROW_NUMBER: 동점이어도 번호가 갈라짐RANK: 동점 같은 순위, 다음 번호 건너뜀DENSE_RANK: 동점 같은 순위, 다음 번호 연속
문제 예제의 정의를 먼저 확인하세요.
연습
RANK/윈도우 태그에서 전체 순위부터 맞춘 뒤, 필요하면 PARTITION을 추가하세요.
상위 N 감각
SELECT * FROM (
SELECT name, score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS rn
FROM players
) t
WHERE rn <= 3;
엔진이 서브쿼리·윈도우를 지원하는지 문제 설명을 따릅니다.
한 줄
> 행을 유지한 채 순위를 붙이면 윈도우, 줄이려면 GROUP BY.
체크리스트
- 행을 줄여야 하나, 유지해야 하나?
- 순위 정의가 RANK인가 ROW_NUMBER인가?
- 그룹(부서·날짜)마다 다시 세나? → PARTITION
지원 문법은 문제마다 다릅니다. 예제 출력의 동점 처리를 먼저 읽으세요.
한 줄: 행 유지 순위=윈도우, 행 축소=GROUP BY.
더 깊게
읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.
관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.
막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.