티스토리 뷰

sum(합을 구하는 함수), decode(치환하는 함수)를 이용해서 그룹별 단순화해보자.

예를 들어, 학과별 자퇴자 명단을 구해보면

select dept, count(sno)

from student

where code = '자퇴'

group by dept;

결과는

 dept count(sno) 
 국문과
 영문과
 철학과

근데 주야간으로 구분해야 한다.

select dept, div_dn, count(sno)

from student

where code = '자퇴'

group by dept, div_dn; 으로 조회하면 아래와 같이 나오는데

 dept div_dn  count(sno) 
 국문과 주간 
 국문과 야간 1
 영문과 주간 
 영문과 야간 
 ... ...  ... 

이런 식으로 같은 과에서 주야별로 나눠져서 나온다. 내가 원한건 아래와 같다.

 dept 주간  야간  count(sno) 
 국문과
 영문과

이렇게 하려면 sum과 decode를 활용하면 쉽다.

sum(컬럼명)은 group으로 묶은 데이터 값의 합을 구하는 함수,

decode(컬럼명, 'A',1,0)은 컬럼에 A값이면 1로 치환 아니면 0으로 치환하는 함수

두 개의 함수를 활용하면

select dept, sum(decode(div_dn,'1',1,0) 주간), sum(decode(div_dn,'1',0,1) 야간), count(sno)

from student

where code = '자퇴'

group by dept, div_dn;

위에 표처럼 출력이 되는데

주야간을 구분하는 div_dn 칼럼은 주간이면 1, 야간이면 2로 입력이 되어 있다.

그래서 decode(div_dn,'1',1,0)을 하면 주간일 경우 1로  치환하고,

decode(div_dn,'1',0,1)을 하면 야간일 경우 1로  치환하고 

sum(decode(div_dn,'1',1,0)을 하면 치환한 1값들을 모두 더해져서

주야간별로 깔끔하게 구할 수 있는 것이다.

 

 

 

728x90
반응형
댓글