다음 SQL의 실행 결과로 옳은 것은?[처방]처방번호의사약품비1D150… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
다음 SQL의 실행 결과로 옳은 것은?[처방]
| 처방번호 | 의사 | 약품비 |
|---|---|---|
| 1 | D1 | 5000 |
| 2 | D1 | 2000 |
| 3 | D1 | 4000 |
| 4 | D2 | 3000 |
| 5 | D2 | 1000 |
| 6 | D3 | 6000 |
| 7 | D3 | 3500 |
| 8 | D3 | (null) |
| 9 | D4 | 2500 |
SELECT 의사, COUNT(*) AS 건수, SUM(약품비) AS 합계 FROM 처방 WHERE 약품비 >= 3000 GROUP BY 의사 HAVING COUNT(*) >= 2 ORDER BY 의사;
1
| 의사 | 건수 | 합계 |
|---|---|---|
| D1 | 3 | 11000 |
| D2 | 2 | 4000 |
| D3 | 3 | 9500 |
2
| 의사 | 건수 | 합계 |
|---|---|---|
| D1 | 2 | 9000 |
| D2 | 1 | 3000 |
| D3 | 2 | 9500 |
3
| 의사 | 건수 | 합계 |
|---|---|---|
| D1 | 2 | 9000 |
| D3 | 2 | 9500 |
4
| 의사 | 건수 | 합계 |
|---|---|---|
| D1 | 3 | 9000 |
| D3 | 3 | 9500 |
해설
WHERE 가 그룹화 전에 실행되어 약품비 3000 이상인 행만 남으므로 D1 은 5000·4000, D2 는 3000, D3 는 6000·3500 이 남고 D4 와 NULL 행은 빠진다.
그 뒤 HAVING 이 남은 행 기준 COUNT(*) 2 이상인 그룹만 고르므로 D1(2건, 9000)과 D3(2건, 9500)만 출력된다.
- COUNT(*) 는 WHERE 에서 걸러진 행을 세지 않는다.
- WHERE 를 무시하고 전체 행으로 집계한 결과가 아니다.
- 건수 1인 D2 는 HAVING 에서 제외된다.
오류나 개정된 내용이 보이면 알려주세요