5. 자주 하는 실수 (Tip)
실수 1: 분석 함수를 WHERE 에 직접 쓴다
WHERE ROW_NUMBER() OVER (...) <= 2 는 오류입니다. 분석 함수는 WHERE 뒤에 계산되기 때문입니다(2.3절). 순위를 계산한 쿼리를 인라인 뷰나 CTE 로 감싸고 바깥 WHERE 에서 거릅니다. 오류 메시지는 DB 마다 다르지만 원인은 같습니다.
실수 2: 동점을 고려하지 않고 ROW_NUMBER 를 쓴다
ROW_NUMBER() OVER (ORDER BY sal DESC) 만 쓰면 동점 행의 번호가 비결정적입니다. 개발의 700 두 명 중 누가 2번이 될지 정해져 있지 않습니다. 고유 컬럼을 덧붙이거나, 동점을 모두 포함하려면 RANK 를 씁니다.
실수 3: OVER 의 ORDER BY 가 결과 정렬까지 해 준다고 믿는다
OVER (ORDER BY ...) 는 순위 계산 기준일 뿐입니다. 결과 행의 출력 순서는 문장 끝의 ORDER BY 가 정합니다. 이 절을 빼면 순위와 다른 순서로 출력되더라도 DB 는 문제로 보지 않습니다.