Oracle 기준으로 진료과별 소계를 얻으려고 작성한 다음 SQL 의 … | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
Oracle 기준으로 진료과별 소계를 얻으려고 작성한 다음 SQL 의 실제 실행 결과로 옳은 것은?[처방실적]
| 의사명 | 진료과 | 금액 |
|---|---|---|
| 윤하 | 내과 | 100 |
| 윤하 | 내과 | 50 |
| 서진 | 내과 | 70 |
| 도윤 | 외과 | 40 |
SELECT 의사명, 진료과, SUM(금액) AS 합계 FROM 처방실적 GROUP BY ROLLUP(의사명, 진료과) ORDER BY 의사명, 진료과;
1
| 의사명 | 진료과 | 합계 |
|---|---|---|
| 도윤 | 외과 | 40 |
| 도윤 | (null) | 40 |
| 서진 | 내과 | 70 |
| 서진 | (null) | 70 |
| 윤하 | 내과 | 150 |
| 윤하 | (null) | 150 |
| (null) | 내과 | 220 |
| (null) | 외과 | 40 |
| (null) | (null) | 260 |
2
| 의사명 | 진료과 | 합계 |
|---|---|---|
| 도윤 | 외과 | 40 |
| 도윤 | (null) | 40 |
| 서진 | 내과 | 70 |
| 서진 | (null) | 70 |
| 윤하 | 내과 | 150 |
| 윤하 | (null) | 150 |
| (null) | (null) | 260 |
3
| 의사명 | 진료과 | 합계 |
|---|---|---|
| 도윤 | 외과 | 40 |
| 도윤 | (null) | 40 |
| 서진 | 내과 | 70 |
| 서진 | (null) | 70 |
| 윤하 | 내과 | 150 |
| 윤하 | (null) | 150 |
4
| 의사명 | 진료과 | 합계 |
|---|---|---|
| 도윤 | 외과 | 40 |
| 서진 | 내과 | 70 |
| 윤하 | 내과 | 150 |
| (null) | 내과 | 220 |
| (null) | 외과 | 40 |
| (null) | (null) | 260 |
해설
ROLLUP 은 인수 순서대로 계층을 만들어 (의사명, 진료과), (의사명), 총계를 집계하므로 의사명별 소계만 생기고 진료과별 소계는 없다.
의사마다 한 진료과에만 속해 있어 의사별 소계 값이 상세 값과 같고, 마지막에 총계 260 이 붙어 7행이 된다.
- 내과 220·외과 40 소계가 있는 6행은 인수 순서를 바꾼 ROLLUP(진료과, 의사명) 결과이다.
- 총계가 없는 결과는 ROLLUP 이 총계도 만든다는 점을 놓친 것이다.
- 두 방향 소계가 모두 있는 결과는 CUBE 의 결과이다.
오류나 개정된 내용이 보이면 알려주세요