각 의사의 평균 진료비보다 진료비가 큰 진료만 조회해 다음 [결과]를 … | [SQLD] SQL 개발자 기출유형 모의고사 2회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 2회
각 의사의 평균 진료비보다 진료비가 큰 진료만 조회해 다음 [결과]를 얻으려 한다. ( ㉠ )에 들어갈 조건으로 옳은 것은?[진료]
| 진료번호 | 의사번호 | 환자번호 | 진료비 |
|---|---|---|---|
| 1 | D1 | P1 | 30000 |
| 2 | D1 | P2 | 50000 |
| 3 | D1 | P3 | 40000 |
| 4 | D2 | P1 | 20000 |
| 5 | D2 | P4 | 26000 |
| 6 | D3 | P2 | 70000 |
| 7 | D3 | P5 | 90000 |
SELECT A.진료번호, A.의사번호, A.진료비
FROM 진료 A
WHERE A.진료비 > (SELECT AVG(B.진료비)
FROM 진료 B
WHERE ( ㉠ ))
ORDER BY A.진료번호;[결과]
| 진료번호 | 의사번호 | 진료비 |
|---|---|---|
| 2 | D1 | 50000 |
| 5 | D2 | 26000 |
| 7 | D3 | 90000 |
1
B.진료번호 = A.진료번호
2
B.환자번호 = A.환자번호
3
B.의사번호 = A.의사번호
4
A.의사번호 IS NOT NULL
해설
바깥 행의 의사번호를 안쪽에서 참조해야 행마다 같은 의사의 평균이 계산되므로
B.의사번호 = A.의사번호가 맞다.연관 서브쿼리는 메인쿼리 행마다 다시 실행되어 D1 평균 40000, D2 23000, D3 80000과 비교하고 2·5·7번만 남는다.
- 환자번호 상관: 환자별 평균과 비교해 1·6번이 나온다.
- 진료번호 상관: 자기 자신의 평균과 같아 0행이다.
- A.의사번호 IS NOT NULL: 전체 평균(약 46571)과 비교해 2·6·7번이 나온다.
오류나 개정된 내용이 보이면 알려주세요