티스토리 뷰

반응형
Sybase IQ에서 분석함수 사용시 편리한 점이 있어 소개해드립니다.
바로 partition by 에 기술된 내용을 alias를 줘서 공통으로 사용할 수 있다는 것입니다.

1. 보편적인 방법
select  rank()          over (partition by 주민번호, 입력일자 order by 주문금액) rn
         ,dense_rank() over (partition by 주민번호, 입력일자 order by 주문금액) r2
from 주문;

2. window 절 이용 
select rank()           over (ws1) rn
        ,dense_rank() over (ws1) rn2
from 주문
window ws1 as (partition by 주민번호, 입력일자 order by 주문금액)
;

window절을 이용하면 훨씬 간단하게 분석함수 쿼리를 작성할 수 있습니다.
복수개의 alias도 가능합니다.
window ws1 as ~~~
           ,ws2 as ~~~~  이런식으로 말이죠.

PS. IQ에서는 alias 기능이 막강한데요 예를 들어 select list 절에 나열된 순서에서 바로 앞에 기술된 alias를 뒤의 리스트에서
     사용할 수 있구요.
     select sum(주문금액) over (ws1) amt_sum
             ,case when amt_sum > 10000 then 'Y' else 'N' end  as YN
     from 주문
     windows ws1 as (partition by 주민번호  rows between unbouned preceding ans current row order by 주문일시)
   ;
   또한 select list에 있는 alias를 group by절에서도 사용할 수 있습니다.
   오라클에서는 select list에 있는 것을 group by절에도 동일하게 기입해 줘야 되죠.
   특히 case when이나 decode 문장을 2군데 모두 써주는것은 여간 귀찮은 일이 아닙니다.    


반응형