[ Oracle - OVER 예제4 ]

 

 Windowing절은 반드시 OVER()함수 내부에 ORDER BY 가 존재 해야 됨
   Windowing절인 ROWS를 사용 앞쪽 특정ROW~ 뒤쪽 특정ROW까지의 범위를 지정한다.
   P_SUM_AMT  : PRECEDING만 사용 시 앞1ROW~현재ROW까지 SUM()이 수행 됨
   PF_SUM_AMT : 앞1ROW 부터 ~ 뒤1ROW까지 범위지정 후 SUM()이 수행 됨
   F_SUM_AMT  : FOLLOWING만 사용 시 오류 발생(이유 모름)

 


WITH
 T AS
(             
SELECT 'GS몰'   AS SHOP, '201405' AS YM, 22000 AS AMT FROM DUAL
    
UNION ALL SELECT 'GS몰'          , '201409'      , 55000        FROM DUAL
    
UNION ALL SELECT 'GS몰'          , '201412'      , 55000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 10000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 20000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 11000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201403'      , 22000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201405'      , 33000        FROM DUAL
)
SELECT SHOP, YM
     , 
SUM(AMT) OVER(ORDER BY SHOP, YM 
                     
ROWS 1 PRECEDING
                     )                                          
AS P_SUM_AMT
     , 
SUM(AMT) OVER(ORDER BY SHOP, YM 
                     
ROWS BETWEEN1 PRECEDING AND 1 FOLLOWING
                     )                                        
  AS PF_SUM_AMT
--     , SUM(AMT) OVER(ORDER BY SHOP, YM 
--                     ROWS  1 FOLLOWING
--                     )                                        AS F_SUM_AMT

  
FROM T
 
ORDER BY SHOP, YM ;

 
 

 

 

 

'(DB) Oracle > SQL.통계-Over함수' 카테고리의 다른 글

Oracle - OVER 예제5  (0) 2017.01.21
Oracle - OVER 예제3  (0) 2017.01.21
Oracle - OVER 예제2  (0) 2017.01.21
Oracle - OVER 예제1  (0) 2017.01.21
Oracle - OVER rows, range 예제1  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - OVER 예제3 ]

 

SUM_AMT     : OVER()함수안에 PARTITION BY의 SHOP 그룹을 대상으로 SUM()이 수행 됨
   SHOP_SEQ_SUM_AMT : OVER()함수안에 PARTITION BY와 ORDER BY 를 사용하면
                      SHOP을 그룹으로 하고, YM(년월)을 정렬한 후 첫번째ROW~ 현재ROW 까지의 SUM()이 
                      수행 됨

 


WITH
 T AS
(             
SELECT 'GS몰'   AS SHOP, '201405' AS YM, 22000 AS AMT FROM DUAL
    
UNION ALL SELECT 'GS몰'          , '201409'      , 55000        FROM DUAL
    
UNION ALL SELECT 'GS몰'          , '201412'      , 55000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 10000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 20000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 11000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201403'      , 22000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201405'      , 33000        FROM DUAL
)
SELECT SHOP, YM
     , 
SUM(AMT) OVER(PARTITION BY SHOP)             AS SHOP_SUM_AMT
     , 
SUM(AMT) OVER(PARTITION BYSHOP ORDER BY YM)  AS SHOP_SEQ_SUM_AMT
  
FROM T
 
ORDER BY SHOP, YM  ;

 
 

 

 
   

'(DB) Oracle > SQL.통계-Over함수' 카테고리의 다른 글

Oracle - OVER 예제5  (0) 2017.01.21
Oracle - OVER 예제4  (0) 2017.01.21
Oracle - OVER 예제2  (0) 2017.01.21
Oracle - OVER 예제1  (0) 2017.01.21
Oracle - OVER rows, range 예제1  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - OVER 예제2 ]

 

  YM_SEQ_SUM_AMT : OVER()함수안에 ORDER BY 를 사용하면
                     YM(년월)을 정렬한 후 첫번째ROW~ 현재ROW 까지의 SUM()이 수행 됨
                     중요 : 이 때 SHOP, YM으로 정렬 후 같은 SHOP, YM이 존재 시 같은 순서로 본다.
    YM_SEQ_SUM_AMT : OVER()함수안에 ORDER BY와 ROW를 사용하면
                     SHOP, YM(년월)을 정렬한 후 첫번째ROW~ 현재ROW 까지의 SUM()이 수행 됨
                     중요 : 이 때 위 SQL 문과 다른점은 CURRENT ROW를 했기 때문에 같은 
                            SHOP, YM도 각각 ROW로 인식 한다.
    ROWS절 : 물리적인 단위에 의해 윈도우 크기 지정
 

 


WITH T AS
(             
SELECT 'GS몰'   AS SHOP, '201405' AS YM, 22000 AS AMT FROM DUAL
    
UNION ALL SELECT 'GS몰'          , '201409'      , 55000        FROM DUAL
    
UNION ALL SELECT 'GS몰'          , '201412'      , 55000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 10000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 20000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201401'      , 11000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201403'      , 22000        FROM DUAL
    
UNION ALL SELECT '양동점'        , '201405'      , 33000        FROM DUAL
)
SELECT SHOP, YM
     , 
SUM(AMT) OVER(ORDER BY SHOP, YM ASC) AS YM_SEQ_SUM_AMT
     , 
SUM
(AMT) OVER(ORDER BY SHOP, YM ASC
                     
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
                     ) 
AS YM_SEQ_SUM_AMT
  
FROM T
 
ORDER BY SHOP, YM ;

 
 

 

 

 

'(DB) Oracle > SQL.통계-Over함수' 카테고리의 다른 글

Oracle - OVER 예제4  (0) 2017.01.21
Oracle - OVER 예제3  (0) 2017.01.21
Oracle - OVER 예제1  (0) 2017.01.21
Oracle - OVER rows, range 예제1  (0) 2017.01.21
Oracle - Over LAST_VALUE  (0) 2017.01.21
Posted by 농부지기
,