[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에 해당하는 모든 데이터가 조회되었다.
[Oracle] 오라클 RANK, DENSE_RANK 순위 함수 사용법
오라클에서 성적, 급여, 매출 등 순위를 구하기 위해서 순위 함수(RANK, DENSE_RANK)를 사용하면 된다. 순위 함수의 순위는 OVER 함수 내부의 ORDER BY 컬럼 값으로 결정된다. RANK() : 중복 순위 개수만큼
gent.tistory.com
[Oracle] 오라클 PARTITION BY 사용법 정리 (분석함수)
오라클에서 분석함수를 사용할 때 PARTITION BY를 사용하여 그룹으로 묶어서 연산을 할 수 있다. GROUP BY 절을 사용하지 않고, 조회된 각 행에 그룹으로 집계된 값을 표시할 때 OVER 절과 함께 PARTITION B
gent.tistory.com
[Oracle] 중복 데이터 하나만 남기고 제거 2가지 방법
오라클에서 조회된 데이터에서 특정 칼럼을 기준으로 하나의 행만 조회해야 하는 경우가 있다. 중복된 칼럼의 데이터에서 그룹별로 최신의 행 하나만 가져오거나, 특정 칼럼으로 정렬하여 최상
gent.tistory.com
[Oracle] 오라클 절대값 구하기 (ABS 함수)
오라클에서 수치값의 음수 부호를 제거하고 절댓값을 구하기 위해서는 ABS 함수를 사용하면 된다. 절댓값은 수치값의 부호를 뺀 값을 의미한다. 양수는 부호가 없기 때문에 그대로 출력되고 음
gent.tistory.com