홈 › SQL 고급 › 01 / 10

순위 분석 함수

ROW_NUMBER, RANK, DENSE_RANK, NTILE
섹션 6진행 0 / 10

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 는 문제로 보지 않습니다.