[Oracle] 오라클 COUNT OVER 사용 방법 / 그룹별 중복 행(값) 찾기

2025. 11. 6. 18:50·DataBase/Oracle
반응형

COUNT와 OVER를 같이 사용하면 GROUP BY 로 그룹화하지 않아도 건수 집계 및 분석이 가능합니다.

  • COUNT만 사용하는 경우 GROUP BY 사용
  • COUNT() OVER() 로 사용하는 경우 GROUP BY 없이 사용
전체 행의 개수 구하기 / 조건 부여
SELECT EMPNO
     , ENAME
     , JOB
     , SAL
     , DEPTNO
     , COUNT(*) OVER() AS TOT_CNT
     , COUNT(CASE WHEN SAL >= 2000 THEN EMPNO END) OVER() AS CNT_2000
    FROM EMP
    WHERE JOB IN ('MANAGER','CLERK','ANALYST')

COUNT OVER 전체 행 개수
COUNT OVER 전체 행 개수

  • OVER() 안을 공란으로 두면 전체 행의 개수 집계
  • COUNT() 안에 CASE WHEN 등으로 조건을 설정 가능
그룹별 최대 순번 (유니크 값 지정)
SELECT EMPNO
     , ENAME
     , JOB
     , DEPTNO
     , COUNT(*) OVER(ORDER BY EMPNO) AS ASC_CNT_PK
    FROM EMP
    WHERE JOB IN ('MANAGER','CLERK','ANALYST')
    ORDER BY ASC_CNT_PK

COUNT OVER 유니크 값 정렬
COUNT OVER 유니크 값 정렬

  • OVER() 내 ORDER BY 옵션에 다른 행과 중복되지 않는 유니크한 값(보통 PK) 지정 시 +1씩 증가하는 순번 적용
  • (PARTITION BY 옵션을 사용하지 않은 경우)
그룹별 최대 순번 (중복 값 지정)
SELECT EMPNO
     , ENAME
     , JOB
     , DEPTNO
     , COUNT(*) OVER(ORDER BY DEPTNO) AS ASC_CNT_DOUBLE
    FROM EMP
    WHERE JOB IN ('MANAGER','CLERK','ANALYST')
    ORDER BY DEPTNO

COUNT OVER 중복 값 정렬
COUNT OVER 중복 값 정렬

  • OVER() 내 ORDER BY 옵션에 다른 행과 중복되는 값 지정 시 중복되는 행 개수 표시
  • 그룹별 누적된 행 개수의 최대값을 중복되는 행에 표시
  • 위 예시는 PARTITION BY를 사용하지 않아서 전체 행에 대해 그룹 지정 
그룹별 중복되는 행(값) 집계
SELECT EMPNO
     , ENAME
     , JOB
     , DEPTNO
     , COUNT(*) OVER(PARTITION BY DEPTNO) AS DEPT_CNT
    FROM EMP
    WHERE JOB IN ('MANAGER','CLERK','ANALYST')
    ORDER BY DEPTNO

COUNT OVER 중복 행 집계
COUNT OVER 중복 행 집계

  • OVER() 내 PARTITION BY 를 사용하면 해당 컬럼으로 그룹 지정 후 개수 집계
  • 그룹 지정한 컬럼이 중복되는 값이면 중복되는 행의 개수만큼 카운트되어 표시
그룹별 중복 값 집계 시 조건 설정
SELECT EMPNO
     , ENAME
     , JOB
     , SAL
     , DEPTNO
     , COUNT(*) OVER(PARTITION BY DEPTNO) AS DEPT_CNT
     , COUNT(CASE WHEN SAL >= 2000 THEN EMPNO END) OVER(PARTITION BY DEPTNO) AS CNT_2000
    FROM EMP
    WHERE JOB IN ('MANAGER','CLERK','ANALYST')
    ORDER BY DEPTNO

COUNT OVER 집계 조건 설정
COUNT OVER 집계 조건 설정

  • COUNT() 내에 CASE WHEN 을 사용하여 중복 값 집계 시 조건 설정 가능
  • CASE WHEN 으로 조건 설정 시 PARTITION BY에 사용하지 않은 컬럼 사용 권장
응용 예제 - 그룹별 중복 행 개수 및 순번
SELECT EMPNO
     , ENAME
     , JOB
     , DEPTNO
     , COUNT(*) OVER(PARTITION BY DEPTNO) AS DEPT_CNT
     , ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY EMPNO) AS DEPT_NUM
     , COUNT(*) OVER() AS TOT_CNT
    FROM EMP
    WHERE JOB IN ('MANAGER','CLERK','ANALYST')
    ORDER BY DEPTNO

ROW_NUMBER() 조합 예시
ROW_NUMBER() 조합 예시

  • ROW_NUMBER() 을 사용해 COUNT OVER와 동일한 그룹을 지정하면 해당 그룹별 순번 부여 가능
반응형
저작자표시 비영리 동일조건 (새창열림)

'DataBase > Oracle' 카테고리의 다른 글

[Oracle] 오라클 순번 매기기 (행, 그룹별 순번) / ROWNUM, ROW_NUMBER()  (0) 2025.11.08
[Oracle] 오라클 초를 분(MI), 시간(HH), 일(DD)로 변환하기  (0) 2025.10.28
[Oracle] 오라클 MERGE INTO 개념 및 사용 방법 / UPDATE, INSERT 동시에 수행 (UPSERT)  (0) 2025.10.15
[Oracle] 오라클 날짜 관련 내장 함수 종류 및 사용 방법  (0) 2025.09.10
[Oracle] 오라클 날짜, 시간 형식(포맷) 총정리 / 구분자, 요일  (0) 2025.09.10
'DataBase/Oracle' 카테고리의 다른 글
  • [Oracle] 오라클 순번 매기기 (행, 그룹별 순번) / ROWNUM, ROW_NUMBER()
  • [Oracle] 오라클 초를 분(MI), 시간(HH), 일(DD)로 변환하기
  • [Oracle] 오라클 MERGE INTO 개념 및 사용 방법 / UPDATE, INSERT 동시에 수행 (UPSERT)
  • [Oracle] 오라클 날짜 관련 내장 함수 종류 및 사용 방법
알쓸전잡
알쓸전잡
다양한 IT/프로그래밍 등 전산 정보 공유
  • 알쓸전잡
    알아두면 쓸데있는 전산 잡학사전
    알쓸전잡
  • 전체
    오늘
    어제
  • 반응형
    • 분류 전체보기 (99) N
      • 문서 (8)
        • 엑셀 (8)
        • 한글(hwp) (0)
        • Tip (0)
      • 전산 (38)
        • 기초 (1)
        • 네트워크 (9)
        • 정보보안 (0)
        • Windows (22)
        • PC (3)
        • AI (3)
      • DataBase (25) N
        • Oracle (19)
        • Oracle Error (6) N
      • 서버 (4)
        • IIS (4)
        • UNIX (0)
      • 웹 개발 (24) N
        • HTML (10) N
        • Classic ASP (8)
        • JavaScript (4) N
        • Tool (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
알쓸전잡
[Oracle] 오라클 COUNT OVER 사용 방법 / 그룹별 중복 행(값) 찾기
상단으로

티스토리툴바