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);
반응형
'SQL 문제 풀기 > 2. SQLD 기출 : 2024.3.01~2024.4.25' 카테고리의 다른 글
<SQLD 50> NTILE 함수에 대한 기출문제 (0) | 2024.04.20 |
---|---|
<SQLD 49> Order by 에 대한 기출문제 (1) | 2024.04.18 |
<SQLD 47> natural join에 대한 기출문제 (0) | 2024.04.16 |
<SQLD 46> Order by에 대한 기출문제 (0) | 2024.04.15 |
<SQLD 45> 데이터 분석함수에 대한 기출문제 (2) | 2024.04.14 |