programing

Oracle의 OVER 절

minimums 2023. 3. 9. 21:57
반응형

Oracle의 OVER 절

Oracle에서 OVER 절의 의미는 무엇입니까?

OVER절은 분석 함수가 동작하는 파티션, 순서 및 창을 지정합니다.

예 1: 이동 평균 계산

AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)

date   amt   avg_amt
=====  ====  =======
1-Jan  10.0  10.5
2-Jan  11.0  17.0
3-Jan  30.0  17.0
4-Jan  10.0  18.0
5-Jan  14.0  12.0

이동 창(너비 3줄)에서 행 위에 날짜별로 정렬하여 작동합니다.

예 2: 진행 중인 잔액 계산

SUM(amt) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

date   amt   sum_amt
=====  ====  =======
1-Jan  10.0  10.0
2-Jan  11.0  21.0
3-Jan  30.0  51.0
4-Jan  10.0  61.0
5-Jan  14.0  75.0

현재 행과 모든 이전 행을 포함하는 창에서 작동합니다.

주의: 애그리게이트의 경우OVER종류를 규정하는 조항ORDER디폴트 창은 다음과 같습니다.UNBOUNDED PRECEDING로.CURRENT ROW따라서 위의 표현은 다음과 같이 단순화할 수 있습니다.

SUM(amt) OVER (ORDER BY date)

예 3: 각 그룹 내 최대값 계산

MAX(amt) OVER (PARTITION BY dept)

dept  amt   max_amt
====  ====  =======
ACCT   5.0   7.0
ACCT   7.0   7.0
ACCT   6.0   7.0
MRKT  10.0  11.0
MRKT  11.0  11.0
SLES   2.0   2.0

특정 부서에 대한 모든 행을 포함하는 창에서 작동합니다.

SQL Fidle: http://sqlfiddle.com/ #!4/9eecb7d/http://http://http://http://sqlfiddle.com/

이를 사용하여 일부 집계 함수를 분석 함수로 변환할 수 있습니다.

SELECT  MAX(date)
FROM    mytable

돌아온다1단일 최대값 행,

SELECT  MAX(date) OVER (ORDER BY id)
FROM    mytable

실행 가능한 최대값의 모든 행을 반환합니다.

Oracle 분석 기능의 일부입니다.

OVER를 사용하는 또 다른 방법은 선택 항목의 결과 열이 예를 들어 다른 "파티션"에서 작동하도록 하는 것입니다.

이것은, 다음과 같습니다.

SELECT 
    name, 
    ssn, 
    case 
      when ( count(*) over (partition by ssn) ) > 1      
      then 1
      else 0
    end AS hasDuplicateSsn
FROM table;

는 SSN이 다른 행에서 공유되는 각 행에 대해 hasDuplicateSsn에 1을 반환합니다.다양한 에러 리포트등의 데이터에 「태그」를 붙이는 경우에 최적.

언급URL : https://stackoverflow.com/questions/1092120/over-clause-in-oracle

반응형