-
SQLD 자격검증실전문제 105번 문제<자격증>/[SQLD] 2023. 3. 20. 21:41728x90
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[복습]
728x90'<자격증> > [SQLD]' 카테고리의 다른 글
SQLD 자격검증실전문제 103번 문제 (0) 2023.03.20 SQLD 자격검증실전문제 104번 문제 (0) 2023.03.20 SQLD 자격검증실전문제 107번 문제 (0) 2023.03.20 SQLD 자격검증실전문제 106번 문제 (0) 2023.03.19 SQLD 자격검증실전문제 109번 문제 (0) 2023.03.19