[ORACLE] OVER() 함수

2020. 11. 5. 19:19DB/쿼리

728x90

SELECT DEPT_NM, COUNT (*) FROM HRM_DEPT GROUP BY DEPT_NM

OVER 함수를 쓰지 않으면 GROUP BY를 이용하여 전체 행의 수를 확인할 수 있다.

 

SELECT DEPT_NM, COUNT (*) OVER () FROM HRM_DEPT

OVER 함수를 쓰면 GROUP BY를 이용하지 않아도 전체 행의 수를 구할 수 있다.

 

SELECT DEPT_NM, COUNT (DISTINCT DEPT_CD) OVER () FROM HRM_DEPT

부서이름과 중복되지 않는 부서코드를 가진 부서 행의 수를 반환

 

SELECT DEPT_NM, COUNT (*) OVER (PARTITION BY DEPT_CD) FROM HRM_DEPT

부서이름과 부서코드로 나눈 부서 행의 수를 반환

 

PARTITION BY 는 GROUP BY 같은 개념이라고 생각하면 된다.

 

COUNT(*) OVER() : 전체 행의 수 반환

COUNT(*) OVER(PARTITION BY 컬럼) : 컬럼 그룹으로 나누어 행의 수 반환

 

 


출처: https://syoons.tistory.com/8 [새싹블로그]

 

 

*참고 (그룹별 최대값 구하기)

 

SELECT

    svc_mm, 

    track_id, 

    sett_idx, 

    ratio

FROM

    (SELECT

        svc_mm, 

        track_id, 

        sett_idx, 

        ratio,

        ROW_NUMBER() OVER(PARTITION BY svc_mm, track_id ORDER BY sett_idx DESC) as row_idx

    FROM

        tmp_test)

WHERE

    row_idx = 1;

 

->svc_mm, track_id를 그룹으로 묶어서 해당그룹별 sett_idx 최대값을 가져옴

 

출처: huskdoll.tistory.com/912

728x90