본문 바로가기
SQL 문제 풀기/2. SQLD 기출 : 2024.3.01~2024.4.25

<SQLD 27> grouping sets 에 대한 기출문제

by HYEHYE_SON 2024. 3. 27.
728x90

매일 SQLD 기출 문제 풀기 챌린지


 


문제 27.

다음과 같은 결과를 조회하기 위한 SQL문의 빈칸 (   ?   ) 을 작성하시오.

 

 

[ 테이블명: TAB1 ]

JOB
10
20
30

 

 

[ 테이블명: TAB2 ]

GRADE
50
60
70

 

 

[ RESULT ]

GRADE JOB SUM(GRADE)
50 10 50
50 20 50
50 30 50
50   150
60 10 60
60 20 60
60 30 60
60   180
70 10 70
70 20 70
70 30 70
70   210

 

[ SQL ]

SELECT B.GRADE, A.JOB, SUM(B.GRADE)
 FROM TAB1 A, TAB2 B
 GROUP BY (   ?    );

 


해설해보기

■ 데이터 분석 함수 grouping sets 

직관적으로 그룹핑할 컬럼을 기입하여 집계 결과를 출력할 수 있는 함수이다.

group by grouping sets( [컬럼A], () )
-- 이 경우 컬럼 A 별 집계 결과와 전체 집계 결과가 출력된다.

group by grouping sets( [컬럼A], [컬럼B] )
-- 이 경우 컬럼 A별 + 컬럼B별 집계 결과를 출력한다.

 

출력된 결과를 보면
GRADE 별 각 JOB에 대한 GRADE의 합계가 출력되고,
각 GRADE의 전체 합계가 하단에 출려되는 것을 확인할 수 있다. 

전체 GRADE의 총 합계가 없는 것으로 보아 ROLLUP 함수는 아니기 때문에
GROUPING SETS 함수를 사용하여 
합계를 출력하고 싶은 컬럼들을 직접 작성해 넣었다고 볼 수 있다.

 

따라서 빈칸에 들어갈 정답은

GROUPING SETS( (B.GRADE, A.JOB ), B.GRADE )

 


직접 실행해보기

SELECT B.GRADE, A.JOB, SUM(B.GRADE)
    FROM TAB1 A, TAB2 B
    GROUP BY grouping sets((B.GRADE, A.JOB),B.GRADE);


관련 스크립트

create table tab1(
job number(10)
);
insert into tab1 values(10);
insert into tab1 values(20);
insert into tab1 values(30);

create table tab2(
grade number(10)
);
insert into tab2 values(50);
insert into tab2 values(60);
insert into tab2 values(70);
commit;

SELECT B.GRADE, A.JOB, SUM(B.GRADE)
FROM TAB1 A, TAB2 B
GROUP BY grouping sets((B.GRADE, A.JOB),B.GRADE);

 
 
 
 
 
 
 
 
 
 

반응형