다음 SQL 의 실행 결과로 옳은 것은?[예약]예약번호편명운임1KE10… | [SQLD] SQL 개발자 기출유형 모의고사 4회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 4회
다음 SQL 의 실행 결과로 옳은 것은?[예약]
| 예약번호 | 편명 | 운임 |
|---|---|---|
| 1 | KE101 | 500 |
| 2 | KE101 | 500 |
| 3 | KE101 | 300 |
| 4 | KE101 | 200 |
| 5 | OZ330 | 400 |
| 6 | OZ330 | 300 |
| 7 | OZ330 | 300 |
SELECT 예약번호, 편명, 운임
FROM (SELECT 예약번호, 편명, 운임,
RANK() OVER (PARTITION BY 편명
ORDER BY 운임 DESC) AS RK
FROM 예약) T
WHERE RK <= 2
ORDER BY 편명, 운임 DESC, 예약번호;1
| 예약번호 | 편명 | 운임 |
|---|---|---|
| 1 | KE101 | 500 |
| 2 | KE101 | 500 |
| 5 | OZ330 | 400 |
| 6 | OZ330 | 300 |
2
| 예약번호 | 편명 | 운임 |
|---|---|---|
| 1 | KE101 | 500 |
| 2 | KE101 | 500 |
| 5 | OZ330 | 400 |
| 6 | OZ330 | 300 |
| 7 | OZ330 | 300 |
3
| 예약번호 | 편명 | 운임 |
|---|---|---|
| 1 | KE101 | 500 |
| 2 | KE101 | 500 |
| 3 | KE101 | 300 |
| 5 | OZ330 | 400 |
| 6 | OZ330 | 300 |
| 7 | OZ330 | 300 |
4
| 예약번호 | 편명 | 운임 |
|---|---|---|
| 1 | KE101 | 500 |
| 2 | KE101 | 500 |
해설
RANK 는 동점에 같은 순위를 주고 그 수만큼 다음 순위를 건너뛰므로, KE101 은 500 두 건이 1위, 300 이 3위가 되어 예약 1·2만 남는다.
OZ330 은 400 이 1위, 300 두 건이 공동 2위라 예약 5·6·7이 모두 RK ≤ 2 를 만족해 결과는 5행이다.
- 예약 3까지 남은 표는 순위를 건너뛰지 않는 DENSE_RANK 의 결과이다.
- 파티션마다 정확히 2행인 표는 동점에도 고유 번호를 주는 ROW_NUMBER 의 결과이다.
- 예약 1·2만 있는 표는 PARTITION BY 없이 전체에서 순위를 매긴 결과이다.
오류나 개정된 내용이 보이면 알려주세요