지점별 신계약 건수 순위로 다음 [결과]를 얻으려 한다. ( ㉠ )에 … | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
지점별 신계약 건수 순위로 다음 [결과]를 얻으려 한다. ( ㉠ )에 들어갈 함수로 옳은 것은?[실적]
| 설계사 | 지점 | 건수 |
|---|---|---|
| 윤아 | 강남 | 9 |
| 도현 | 강남 | 9 |
| 시우 | 강남 | 8 |
| 하린 | 강남 | 7 |
| 지안 | 판교 | 6 |
| 서준 | 판교 | 5 |
| 예린 | 판교 | 5 |
SELECT 지점, 설계사, 건수
FROM (SELECT 지점, 설계사, 건수,
( ㉠ ) OVER (PARTITION BY 지점
ORDER BY 건수 DESC) AS 순위
FROM 실적) T
WHERE 순위 <= 2
ORDER BY 지점, 건수 DESC, 설계사;[결과]
| 지점 | 설계사 | 건수 |
|---|---|---|
| 강남 | 도현 | 9 |
| 강남 | 윤아 | 9 |
| 강남 | 시우 | 8 |
| 판교 | 지안 | 6 |
| 판교 | 서준 | 5 |
| 판교 | 예린 | 5 |
1
NTILE(2)
2
RANK()
3
ROW_NUMBER()
4
DENSE_RANK()
해설
[결과]에서 강남은 9건 두 명 뒤의 8건까지, 판교는 6건과 동점인 5건 두 명이 모두 나오므로 동점 뒤 순위를 건너뛰지 않는 DENSE_RANK() 가 맞다.
강남 순위는 DENSE_RANK 로 1·1·2·3, RANK 로 1·1·3·4 가 되어 동점 뒤 순위 처리에서 결과가 갈린다.
- RANK() 는 강남 8건이 3위가 되어 강남에서 9건 두 명만 남는다.
- ROW_NUMBER() 는 동점에도 고유 번호를 주어 판교 5건 중 한 명이 빠진다.
- NTILE(2) 는 행을 두 묶음으로 나눌 뿐이라 모든 행이 2 이하가 되어 하린까지 나온다.
오류나 개정된 내용이 보이면 알려주세요