시험에 앞서 중요하다 생각되는 Group By, Join에 대해 노랑이책과 함께 정리하도록 하겠다.
Select col1, col2, count(col3)
From Info
Group By col1, col2; --->>> 이런 식으로 사용한다.
Group By 형태의 함수
1. ROLLUP
- 부분합계와 전체 합계값을 보여준다.
- 인수의 순서에 영향을 받는다.
Select col1,col2
From Info
Group by ROLLUP(col1, col2)
Order by col1, col2;
ex의 san francisco의 3번째는 첫 인자의 합이고
SanJose의 3번째는 첫인자의 합이다.
이런 식으로 부분합계를 구할 수 있다.
2. CUBE
- 그룹화될 수 있는 모든 경우에 대해 생성
Select col1, col2, Sum(col3)
From
Group By Cube (co1, co2);
3. Grouping Sets(col1, col2)
- col1 별 합계
- col2 별 합계
- 괄호 묶은 집합별 집계가능
Select col1, col2
From Info
Group By Grouping Sets ((col1, col2), col3);
4. Grouping 함수
- 소계, 합계등이 계산되면 1을 반환하고 아니면 0을 반환한다.
Select col1, Grouping(col1) q1, col2, Grouping(col2) q2, Sum(col3)
From Info
Group By ROLLUP (col1, col2)
Order By col1, col2;
Col1 | q1 | col2 | q2 | Sum(col3) |
exam | 0 | data1 | 0 | 1000 |
exam | 0 | data2 | 0 | 2000 |
exam | 0 | 1 | 3000 | |
exam1 | 0 | data11 | 0 | 10000 |
exam1 | 0 | data12 | 0 | 20000 |
exam1 | 0 | 1 | 30000 | |
1 | 1 | 33000 |
Q.Case When을 활용하여 전체 합계를 구해보자.
Select col1, Grouping(col1) q1, col2, Grouping(col2) q2, Sum(col3)
From Info
Grouping Rollup(col1, col2)
Order by col1, col2;
col1 | q1 | col2 | q2 | Sum(col3) |
data1 | 0 | data0 | 0 | 1000 |
data1 | 0 | data00 | 0 | 4000 |
data1 | 0 | 1 | 5000 | |
data2 | 0 | data22 | 0 | 5000 |
data2 | 0 | data222 | 0 | 50000 |
data2 | 0 | 1 | 55000 | |
1 | 1 | 60000 |
Select col1, Case When Grouping(col1) =1 Then 'TotalValue' End As q1,
col2, Grouping (col2) q2 , Sum(col3)
From Info
Group By Rollup(col1, col2)
Order By col1, col2;
col1 | q1 | col2 | q2 | Sum(col3) |
data1 | 0 | data0 | 0 | 1000 |
data1 | 0 | data00 | 0 | 4000 |
data1 | 0 | 1 | 5000 | |
data2 | 0 | data22 | 0 | 5000 |
data2 | 0 | data222 | 0 | 50000 |
data2 | 0 | 1 | 55000 | |
TotalValue | 1 | 60000 |
'SQL' 카테고리의 다른 글
SQLD 시험 대비 - Group By, Join (3) (2) | 2023.03.16 |
---|---|
SQLD 시험 대비 - Group By, Join (2) (0) | 2023.03.16 |
SQLD 시험 대비 - SQL 활용편(3) (0) | 2023.03.08 |
SQLD 시험 대비 - SQL 활용편(3) (0) | 2023.03.08 |
SQLD 시험 대비 - SQL 활용편(2) (0) | 2023.03.07 |