본문 바로가기

SQL

SQLD 시험 대비 - Group By, Join (1)

시험에 앞서 중요하다 생각되는 Group By, Join에 대해 노랑이책과 함께 정리하도록 하겠다.


Select col1, col2, count(col3)

From Info

Group By col1, col2; --->>> 이런 식으로 사용한다.

기본적인 Group by 의 형태


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);

CUBE의 예시


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

 

 

 

 

반응형