본문 바로가기
BackEnd/Database

[DB] TOP-N 분석과 분석함수

by ryuneng 2025. 1. 20.
반응형

# 목적

: TOP-N 분석과 분석함수에 대한 이해




Top-N 분석 이란?

- 조건에 맞는 최상위 데이터 N개 혹은 최하위 데이터 N개를 조회하는 쿼리
- 형식

SELECT ROWNUM, 컬럼명, 컬럼명, 컬럼명, ...
FROM (SELECT 컬럼명, 컬럼명, 컬럼명, ...
      FROM 테이블명
      [WHERE] 조건식
      ORDER BY 컬럼명)
WHERE ROWNUM <= N;
* ROWNUM : 오라클에서 제공하는 가상컬럼
1) SELECT절에서 사용 시, 추출하는 데이터에 1부터 시작하는 순번을 부여하는 용도로 사용됨
2) WHERE절에서 사용 시, 추출한 데이터 중 일부만 가져오는 용도로 활용할 수 있음
3) ORDER BY절로 데이터를 정렬한 후 ROWNUM으로 몇개의 데이터만 추출해야 하는 경우,
   ORDER BY절을 먼저 처리하도록 인라인 뷰를 만들고, 그 뷰를 감싸는 바깥쪽 SQL에서 ROWNUM 처리를 함

*ROWNUM은 순번을 1부터 부여하는 가상컬럼이기 때문에,
 ROWNUM의 시작을 1이 아닌 값부터 추출하려 할 경우에는 데이터가 조회되지 않음

- 사용예시)

-- 직원들을 급여순으로 정렬했을 때 급여를 가장 많이 받는 직원
-- 5명의(1등~5등) 직원아이디, 이름, 급여, 직종아이디 조회하기
SELECT ROWNUM, EMPLOYEE_ID, FIRST_NAME, SALARY, JOB_ID
FROM (SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, JOB_ID
      FROM EMPLOYEES
      ORDER BY SALARY DESC)
WHERE ROWNUM <= 5;




오라클의 분석함수

- 테이블의 데이터를 특정 용도로 분석하여 결과를 반환하는 함수

- 종류
1. 순위 함수 : RANK, DENSE_RANK, ROW_NUMBER
2. 집계 함수 : SUM, MIN, MAX, AVG, COUNT

- 형식

SELECT 분석함수((컬럼)) OVER ((PARTITION BY 컬럼) (ORDER BY 컬럼))
FROM 테이블명




그룹함수와 분석함수의 차이

1) 그룹함수

- 테이블 전체 혹은 그룹 당 하나의 결과 반환

- 테이블 당 하나 :

SELECT SUM(SALARY)
FROM EMPLOYEES;

- 그룹 당 하나 :

SELECT SUM(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;

2) 분석함수

- 행마다 하나의 결과 반환

SELECT FIRST_NAME, SUM(SALARY) OVER()
FROM EMPLOYEES;
-- 전체 사원들의 급여 총액이 행마다 표시됨
SELECT FIRST_NAME, SUM(SALARY) OVER (PARTITION BY DEPARTMENT_ID)
FROM EMPLOYEES;
-- 각 부서별 급여 총액이 행마다 표시됨

 


< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >

🔗 velog 버전 보기 : https://velog.io/@ryuneng2/DB-TOPN