SQL 4 Oracle 오라클용 sql 실무

SQL4Oracle

메인 Table 안에서 OVER함수 이용 다중고객 계산하기

돌프1 2023. 3. 10. 14:15

2011-08-26 13:45:50


SQL 4 Oracle 오라클용 sql 실무
▒ 메인 Table 안에서 OVER함수 이용 다중고객 계산하기

 

▒ 인라인 뷰를 이용 다중고객 계산하기

select decode(eq_YN, 0, '단독고객', '다중고객') 다중고객유무,

         mdf_mon 등록년월,        

         count(*) 총건수,

         count(distinct 고객ID) 고객수,        
         sum(취득점수) 취득점수
from
(
     select         

             A.고객ID,                                          
            decode( B.eq_CNT, 1, '0', '1') eq_YN  
             substr(A.등록년월일,1,6) mdf_mon,
             A.취득점수
     from 목적_Table A ,

                    (select B.고객ID ,count(*)   eq_CNT

                     from 목적_Table B 
                     where B.고객상태='활동중
                     GROUP BY B.고객ID) B
     where A.고객상태='활동중'                          

        and A.고객ID= A.고객ID
)                                                    
group by decode(eq_22,0,'동일인유','동일인무'), mdf_mon        

 


▒ 서브쿼리를 이용 다중고객 계산하기

select decode(eq_YN, 0, '단독고객', '다중고객') 다중고객유무,

         mdf_mon 등록년월,        

         count(*) 총건수,

         count(distinct 고객ID) 고객수,        
         sum(취득점수) 취득점수
from
(
     select         

             고객ID,                                          
             decode( (select count(*)
                            from 목적_Table B
                            where B.고객상태='활동중
                               and  B.고객ID=A.고객ID)
                          ,1,'0','1')  eq_YN,   
             substr(등록년월일,1,6) mdf_mon,
             취득점수
     from 목적_Table A
     where 고객상태='활동중'                          
)                                                    
group by decode(eq_22,0,'동일인유','동일인무'), mdf_mon                             
                          


▒ OVER함수 이용 다중고객 계산하기(인라인 뷰, 서브쿼리보다 응답속도가 탁월하다)

select decode(eq_YN, 0, '단독고객', '다중고객') 다중고객유무,
          mdf_mon 등록년월,

          count(*) 총건수,

          count(distinct 고객ID) 고객수,

          sum(취득점수) 취득점수
from
(
      select 

              고객ID,                                                 
              decode( count(*) OVER(PARTITION BY 고객ID) ,1,'0','1')  eq_YN,   
              substr(등록년월일,1,6) mdf_mon,
              취득점수
      from 목적_Table
      where 고객상태='활동중'                          
)                                                    
group by decode(eq_22,0,'동일인유','동일인무') ,mdf_mon 

 

'SQL4Oracle' 카테고리의 다른 글

PROCEDURE 상태체크  (0) 2023.03.10
TABLESPACE 당 사용율 조회  (0) 2023.03.10
replace가 꼭 필요한 시점  (0) 2023.03.10
재미있는 DUAL 테이블2  (0) 2023.03.10
재미있는 DUAL 테이블  (0) 2023.03.10