DECODE 사용시 주의사항

 

*펼칠 컬럼이 너무 많을때는 먼저 GROUP BY 한 후 처리하라.

select dept_no,

sum(decode(substr(wk_kt,7,2), '01', amt)) d1,

sum(decode(substr(wk_kt,7,2), '02', amt)) d2,

sum(decode(substr(wk_kt,7,2), '03', amt)) d3,

sum(decode(substr(wk_kt,7,2), '04', amt)) d2,

,,,

sum(decode(substr(wk_kt,7,2), '31', amt)) d31

​ 

 

select dept_no,

sum(decode(dd,'01', amt)) d1,

sum(decode(dd,'02', amt)) d2,

sum(decode(dd,'03', amt)) d3,

sum(decode(dd,'04', amt)) d4,

,,,                                                                   ▶①, ②, ④, ⑤는 동일하다.

sum(decode(dd,'31', amt)) d31​                      ③의 결과는 count(8) 과 동일하다.

  from(select dept_no, substr(wk_dt,7,2), dd, sum(amt) amt

         from tab1                                                 ▶①은 ②보다 불리다하(불필요한 0 연산)

         where wk_dt like '200401%'

         )                                                            ②는 ④, ⑤보다 불리

group by dept_no

                                                                      ▶④, ⑤는 동일하다.

*COUNT, SUM의 비교

sum(decode(col1,'A',1,0))

sum(decode(col1,'A',1))             □SUM은 COUNT에 비해 30~50% 불리함

count(decode(col1,'A',1,0))                          

count(decode(col1,'A',1))           □COUNT는 not null인 경우에만 처리

count(decode(col1,'A','C'))

                                                        COUNT를 사용할 수 있다면 SUM을 사용하지 마라.

 

 

 

 

+ Recent posts