진료비 상위 환자를 조회하려는 다음 SQL 중 실행 시 오류가 발생하는… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지

1[SQLD] SQL 개발자 기출유형 모의고사 6회
진료비 상위 환자를 조회하려는 다음 SQL 중 실행 시 오류가 발생하는 것은?

[진료]

진료번호과코드환자명진료비
1K1강민30000
2K1오라52000
3K2하율18000
4K2표지안41000

㉠

SELECT 환자명, 진료비
  FROM (SELECT 환자명, 진료비,
               ROW_NUMBER() OVER (ORDER BY 진료비 DESC) AS RN
          FROM 진료) V
 WHERE RN <= 3;

㉡

SELECT 환자명, 진료비,
       ROW_NUMBER() OVER (ORDER BY 진료비 DESC) AS RN
  FROM 진료
 WHERE RN <= 3;

㉢

SELECT 환자명, 진료비
  FROM 진료
 ORDER BY 진료비 DESC
 FETCH FIRST 3 ROWS ONLY;

㉣

SELECT 과코드, 환자명
  FROM (SELECT 과코드, 환자명,
               ROW_NUMBER() OVER (PARTITION BY 과코드
                                  ORDER BY 진료비 DESC) AS RN
          FROM 진료) V
 WHERE RN = 1;
1
㉣
2
㉢
3
㉡
4
㉠
해설

WHERE 절은 SELECT 절보다 먼저 처리되므로 SELECT 에서 만든 윈도우 함수 별칭 RN 을 같은 쿼리의 WHERE 에서 참조하면 오류가 난다.

순번으로 거르려면 순번을 매긴 쿼리를 인라인 뷰로 감싼 뒤 바깥 WHERE 에서 RN 을 비교해야 한다.

  • ㉠은 인라인 뷰에서 순번을 만든 뒤 바깥에서 거르는 올바른 방식이다.
  • ㉢은 정렬 후 3행만 가져오는 표준 FETCH FIRST 구문이다.
  • ㉣은 과코드별로 순번을 매겨 과마다 최고 진료비 환자를 구한다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[SQLD] SQL 개발자 기출유형 모의고사 6회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요SQLD SQL 개발자 실전 모의고사 암기장 전체 보기