연습 문제 #105 SQLD 자격 확인


#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.ServiceID) = 0은 A.ServiceID가 그룹의 마지막 계층이 아님을 의미합니다. 마지막 교대조가 아니면 그룹별로 A.service ID를 출력하고 그렇지 않으면 ‘sum’을 출력합니다. 마찬가지로 GROUPING(B.joining date) = 0 의 경우에도 해당 그룹의 마지막 계층이 아니면 합류 날짜를 출력하고, 그렇지 않으면 “subtotal”을 출력합니다.

두 번째 줄은 이후 날짜가 NULL인 경우 NVL 함수를 사용하여 하이픈(‘-‘)을 인쇄합니다.

세 번째 줄은 COUNT 함수를 사용하여 각 그룹의 구독 수를 반환합니다.

마지막으로 GROUP BY ROLLUP(A. 서비스 ID, B. 구독 날짜)을 사용하여 A. 서비스 ID 및 B. 구독 날짜별로 그룹화하고 ROLLUP 함수를 사용하여 각 계층의 합계 및 총계를 반환합니다.

728×90

(검토)