[Oracle/SQL] PARTITION BY, OVER

Posted on 2014. 9. 7. 17:35
Filed Under DB


PARTITION BY : 특정 컬럼 기준으로 데이터를 나눈다.
OVER : PARTITION BY(그룹핑) 한 데이터를 정렬해서 뽑는다.


사용예:)
-- 예시1:
-- 데이터를 A, B별로 나눠서 (PARTITION BY)
-- RANK 역순 정렬 (나뉜 데이터 내부 정렬)
-- 상위 3건 데이터를 추출 (나뉜 데이터별 3건)
SELECT *
FROM
 (SELECT GRP, MGNO, NAME, RANK() OVER (PARTITION BY A, B ORDER BY RANK DESC) RANK
    FROM TBL_NAME 
 )
WHERE RANK <= 3;

-- 예시2: 특정 조건의 COUNT 구하기
SELECT A.COL1, A.COL2,
        COUNT(*) OVER (PARTITION BY A.COL1, A.COL2) AS CNT
  FROM TBL A, TBL B
WHERE A.ID = B.ID
            AND B.CONDITION = 'VALUE';

참고1: PARTITION BY 구문
참고2: http://www.gurubee.net/lecture/1284 (다른예제들)
참고3: RANK(), DENSE_RANK(), ROW_NUMBER(), PARTITION BY 


반응형

About

by 쑤기c

반응형