SQLD(SQL 개발자) 기출 · 그룹 함수
다음 중 아래의 테이블에서 SQL을 실행할 때 결과로 가장 적절한 것은?

본문)
[SQL]
SELECT CASE
WHEN GROUPING(A.서비스ID) = 0 THEN A.서비스ID
ELSE '합계'
END AS 서비스ID
, CASE
WHEN GROUPING(B.가입일자) = 0 THEN NVL(B.가입일자, '-')
ELSE '소계'
END AS 가입일자
, COUNT(B.회원번호) AS 가입건수
FROM 서비스 A
LEFT OUTER JOIN 서비스가입 B
ON (A.서비스ID = B.서비스ID
AND B.가입일자 BETWEEN '2013-01-01' AND '2013-01-31')
GROUP BY ROLLUP(A.서비스ID, B.가입일자);이 문제 풀어보기
정답 및 해설 보기
정답: 2번
ROLLUP(A.서비스ID, B.가입일자)은 서비스ID별 가입일자 상세 행, 서비스ID별 소계, 전체 합계를 차례로 생성한다. 또한 LEFT OUTER JOIN을 사용했으므로 가입내역이 없는 서비스ID 004도 결과 집합에 남는다. 이때 COUNT(B.회원번호)는 NULL을 세지 않으므로 004의 가입건수는 0으로 표시된다. 따라서 004에 대해 가입일자 '-' 행과 소계 0 행이 함께 나오고, 마지막에 전체 합계 8건이 출력되는 2번이 정답이다. 4번은 004가 아예 보이지 않아 INNER JOIN 결과에 해당한다.