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

<SQLD 48> 레포팅 함수에 대한 기출문제

by HYEHYE_SON 2024. 4. 17.
728x90

 

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


 


문제 48.

다음 주어진 두개의 테이블에 대해서 아래와 같은 결과값이 반환되도록 아래의 SQL문의 빈칸에 들어갈 값을 적으시오.

 

[TEST47_1]

STUDENTNO
10
20
30

 

[TEST47_2]

GRADE
50
60
70

 

[결과값]

GRADE STUDENTNO  SUM(B.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.STUDENTNO, SUM(B.GRADE)
    FROM TEST47_1 A, TEST47_2 B
    GROUP BY (             );

 
답 : _______


해설해보기

 

■ Reporting 함수 3가지 비교



 1. ROLLUP 


group by roullup([컬럼명],[컬럼명])

이 연산자는 지정된 컬럼에 대해 계층적으로 합계를 수행합니다. 
단, 낮은 수준에서 상위 수준으로 데이터를 요약하여 가장 마지막에 총합계가 출력됩니다. 

#문법 공식을 암기
ROLLUP 함수안에 컬럼의 개수 + 1 개 만큼 집계한 결과 그룹이 출력

select deptno, job, sum(sal) 
    from emp
    group by rollup(deptno, job) -> 2 + 1 = 3개의 집계 결과 그룹이 출력

 

#출력되는 결과 집합
1) 부서번호별 직업별 토탈월급(deptno, job)
2) 부서번호별 토탈월급(deptno)
3) 전체 토탈월급 

 


 2. CUBE 

cube 연산자는 전체 토탈을 맨 위에 출력합니다.

select deptno, sum(sal)
    from emp
    group by cube(deptno);

 

  • rollup vs cube 비교
    • rollup : 컬럼의 개수 + 1개가 그룹핑 되어 출력됩니다.
    • cube : 2의 n승(n = 컬럼의 개수) 만큼 그룹핑 되어 출력됩니다. 

 

 3. grouping sets  

 

group by grouping sets(([컬럼명],[컬럼명]),([컬럼명]),());

 

직접 특정 그룹화 조합을 지정할 수 있어서 가장 선호되는 reporting 함수 입니다. 

지정할 때는 괄호를 사용하여 구분합니다.

 

select deptno, job, sum(sal)
	from emp
	group by grouping sets((deptno, job),(deptno),())
	order by deptno, job;

 

3개의 reporting 함수 중 총합계를 출력하지 않을 수 있는 연산자는 grouping sets가 유일합니다.
따라서 정답은

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


관련 스크립트

create table test47_1
( studentno number(5) );

insert into test47_1 values(10);
insert into test47_1 values(20);
insert into test47_1 values(30);


create table test47_2
( grade number(5) );

insert into test47_2 values(50);
insert into test47_2 values(60);
insert into test47_2 values(70);

 

반응형