SQLD(SQL 개발자) 기출 · 그룹 함수
다음은 TAB1 테이블에 대한 SQL문이다. 위 쿼리의 실행 결과로 옳은 것은?
본문)
<SQL>
INSERT INTO TAB1 VALUES('A',100);
INSERT INTO TAB1 VALUES('B',200);
INSERT INTO TAB1 VALUES('C',300);
INSERT INTO TAB1 VALUES('C',400);
SELECT COUNT(*)
FROM (
SELECT COL1, SUM(COL2)
FROM TAB1
GROUP BY ROLLUP(COL1), COL1
) SUB;
이 문제 풀어보기
정답 및 해설 보기
정답: 3번
ROLLUP(COL1) 자체가
→ GROUP BY COL1
→ + 전체 소계 (GROUP BY ())
그런데 ROLLUP(COL1), COL1 이라고 하면,
→ 마치 GROUP BY COL1, COL1 또는
→ GROUPING SETS ((COL1), (COL1), ()) 과 같은 효과를 줍니다.
즉, COL1로 그룹핑한 결과가 중복으로 2번 나오고,
전체 합계(ROLLUP)가 1번 더 추가됨
→ 하지만 Oracle은 중복된 GROUP BY COL1 구문을 자동으로 제거하지 않고 모두 집계로 처리합니다.
→ 이로 인해 총 7건이 나와야 할 것 같지만, 실제 쿼리 결과는 6건입니다.
→ GROUP BY COL1
→ + 전체 소계 (GROUP BY ())
그런데 ROLLUP(COL1), COL1 이라고 하면,
→ 마치 GROUP BY COL1, COL1 또는
→ GROUPING SETS ((COL1), (COL1), ()) 과 같은 효과를 줍니다.
즉, COL1로 그룹핑한 결과가 중복으로 2번 나오고,
전체 합계(ROLLUP)가 1번 더 추가됨
→ 하지만 Oracle은 중복된 GROUP BY COL1 구문을 자동으로 제거하지 않고 모두 집계로 처리합니다.
→ 이로 인해 총 7건이 나와야 할 것 같지만, 실제 쿼리 결과는 6건입니다.