[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
반응형