<자격증>/[SQLD]

SQLD 자격검증실전문제 105번 문제

9566 2023. 3. 20. 21:41
728x90

 



105번. 다음 중 아래의 테이블에서 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.가입일자);

 

[정답] 3번

[해설]

이 SQL 쿼리는 서비스와 서비스가입 두 개의 테이블을 조인하고, 서비스ID와 가입일자를 기준으로 그룹화한 결과를 출력하는 것입니다.

첫 번째 줄에서는 CASE문을 사용하여 GROUPING 함수의 결과를 확인합니다. GROUPING 함수는 ROLLUP으로 그룹화된 결과에서 계층적인 정보를 파악하기 위해 사용합니다. GROUPING(A.서비스ID) = 0은 A.서비스ID가 그룹의 마지막 계층이 아니라는 의미입니다. 마지막 계층이 아니면 그룹별로 A.서비스ID를 출력하고, 그렇지 않으면 '합계'를 출력합니다. GROUPING(B.가입일자) = 0도 마찬가지로, 가입일자가 그룹의 마지막 계층이 아니면 가입일자를 출력하고, 그렇지 않으면 '소계'를 출력합니다.

두 번째 줄에서는 NVL 함수를 사용하여 가입일자가 NULL인 경우에는 대시('-')를 출력하도록 합니다.

세 번째 줄에서는 COUNT 함수를 사용하여 각 그룹별 가입건수를 출력합니다.

마지막으로 GROUP BY ROLLUP(A.서비스ID, B.가입일자)를 사용하여 A.서비스ID와 B.가입일자를 기준으로 그룹화하고, ROLLUP 함수를 사용하여 각 계층별 합계 및 총합계를 출력합니다.

 

 

[복습]

 

 

 

728x90