Oracle의 OVER
절은 분석 함수(Analytic Function)를 사용할 때 사용되는 절입니다. 분석 함수는 행 집합에 대해 계산을 수행하고 결과를 반환하는 함수입니다. OVER
절은 분석 함수가 작동하는 방식과 결과를 제어하는 데 사용됩니다.
OVER
절의 구문은 다음과 같습니다:
<analytic_function> OVER ([PARTITION BY <columns>]
[ORDER BY <columns>]
[ROWS <window_specification>])
<analytic_function>
: 사용할 분석 함수의 이름입니다.PARTITION BY <columns>
(선택 사항): 데이터를 그룹화할 기준이 되는 열의 목록입니다.ORDER BY <columns>
(선택 사항): 데이터를 정렬하는 데 사용되는 열의 목록입니다.ROWS <window_specification>
(선택 사항): 계산에 사용할 윈도우(행 범위)를 지정합니다.아래는 OVER
절을 사용한 예시 코드입니다:
SELECT employee_name, department_name, salary,
AVG(salary) OVER (PARTITION BY department_name) AS avg_salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
위의 코드는 "employees" 테이블에서 사원 이름, 부서 이름, 급여를 선택하고, OVER
절을 사용하여 분석 함수를 적용한 예시입니다. 결과에는 "avg_salary" 열과 "row_num" 열이 추가됩니다.
AVG(salary) OVER (PARTITION BY department_name) AS avg_salary
: AVG
함수를 사용하여 각 부서의 평균 급여를 계산합니다. PARTITION BY
절을 사용하여 부서별로 그룹화합니다. 이렇게 하면 각 행에 해당 부서의 평균 급여가 표시됩니다.ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
: ROW_NUMBER
함수를 사용하여 각 행의 순서 번호를 지정합니다. ORDER BY
절을 사용하여 급여를 기준으로 내림차순으로 정렬합니다. 따라서 순서 번호가 가장 높은 행부터 내림차순으로 할당됩니다.예를 들어, 다음과 같은 데이터가 있다고 가정합니다:
employee_name | department_name | salary
---------------------------------------
John | IT | 5000
Jane | IT | 6000
David | IT | 5500
Lisa | HR | 4000
Eric | HR | 4500
위의 쿼리를 실행하면 다음과 같은 결과가 반환됩니다:
employee_name | department_name | salary | avg_salary | row_num
--------------------------------------------------------------
John | IT | 5000 | 5500 | 3
Jane | IT | 6000 | 5500 | 1
David | IT | 5500