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);
반응형
'SQL 문제 풀기 > 2. SQLD 기출 : 2024.3.01~2024.4.25' 카테고리의 다른 글
<SQLD 29> reporting 함수에 대한 기출문제 (0) | 2024.03.29 |
---|---|
<SQLD 28> row_number() 함수에 대한 기출문제 (0) | 2024.03.28 |
<SQLD 26> outer 조인에 대한 기출문제 (2) | 2024.03.26 |
<SQLD 25> Like 연산자에 대한 기출문제 (0) | 2024.03.25 |
<SQLD 24> count 그룹함수/연산자 우선순위에 대한 기출문제 (0) | 2024.03.24 |