[Oracle] 오라클 근삿값(근사치) 찾는 2가지 방법

오라클 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에 해당하는 모든 데이터가 조회되었다.

예제쿼리(테이블포함).txt
0.00MB

 

[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

 

 

댓글

Designed by JB FACTORY