Oracle Over

agnusdei·2023년 7월 5일
0
post-custom-banner

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  
post-custom-banner

0개의 댓글