반응형
# 목적
: 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
'BackEnd > Database' 카테고리의 다른 글
[MySQL] DB 사용자 및 데이터베이스 생성 후 연결까지 (0) | 2025.01.20 |
---|---|
[DB] 무결성 제약조건(Constraint) (0) | 2025.01.20 |
[DB] Oracle의 DDL (0) | 2025.01.20 |
[DB] Transaction(트랜잭션) - Commit, Rollback (0) | 2025.01.20 |
[DB] SubQuery(서브쿼리) (0) | 2025.01.20 |