반응형
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
반응형
'programing' 카테고리의 다른 글
Yup에서의 조건부 검증 (0) | 2023.03.14 |
---|---|
반응: 입력 값이 상태별로 변경되는 경우 onChange를 트리거합니까? (0) | 2023.03.09 |
AngularJS HTML5 모드 - 서버 고유의 변경 없이 다이렉트 링크는 어떻게 동작합니까? (0) | 2023.03.09 |
Angular JS + Jasmine : 객체 비교 (0) | 2023.03.09 |
Wordpress 다중 사이트:서브사이트 wp-admin "err_too_many_redirects" (0) | 2023.03.09 |