[Oracle] 오라클 근삿값(근사치) 찾는 2가지 방법
- 데이터베이스/오라클
- 2024. 9. 23.
오라클 SQL에서 근삿값(가장 가까운 값)을 찾기 위해서는 ROW_NUMBER 함수와 RANK 함수를 사용하면 된다. ROW_NUMBER 함수는 결과 집합에 고유한 번호를 매기기 때문에 데이터가 1건만 조회가 되고, RANK 함수는 동일한 값이 있을 경우 같은 순위를 부여하기 때문에 중복된 데이터가 있을 경우 모두 조회가 된다. 위의 두 개의 함수를 사용하여 특정 기준 값과 가장 가까운 값을 찾는데 아주 유용하게 사용할 수 있다.
목차 |
ROW_NUMBER 함수를 사용하여 근삿값 찾기
SELECT *
FROM (
SELECT empno
, ename
, sal
, ROW_NUMBER() OVER(ORDER BY ABS(sal - 1200)) AS rn
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
)
WHERE rn = 1
위의 예제는 급여(SAL)가 1200에 가장 가까운 데이터 1건이 조회된다.
ABS 함수를 사용한 이유는 음수, 양수 부호를 제거하고 가장 가까운 값을 찾기 위해서이다.
ROW_NUMBER 함수를 사용했을 경우 근삿값에 가까운 동일한 데이터가 존재할 경우, 조회된 데이터에서 1건만 조회되기 때문에 주의해서 사용해야 한다. 근삿값에 가까운 데이터가 여러 건 있을 경우 모두 조회가 되어야 한다면 RANK 함수를 사용해야 한다.
RANK 함수를 사용하여 근삿값 찾기
SELECT *
FROM (
SELECT empno
, ename
, sal
, RANK() OVER(ORDER BY ABS(sal - 1200)) AS rn
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
)
WHERE rn = 1
RANK 함수를 사용했을 경우 동일한 근삿값이 있을 경우 모두 조회가 된다.
근사치 기준값 1200에 가까운 급여(SAL) 1250에 해당하는 모든 데이터가 조회되었다.