본문 바로가기

SQL

ORACLE|KEEP(DENSE_RANK FIRST ORDER BY …) - A컬럼 기준 정렬 후 지정 된 행의 B컬럼값 추출하기

필드 a와 같은 record에 있는 필드 b의 값을 가져오는 방법.

first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.

MIN(B) (DENSE_RANK FIRST ORDER BY A [ASC|DESC])

MAX(B) (DENSE_RANK LAST ORDER BY A [ASC|DESC])


【형식】
집합함수 KEEP (
 DENSE_RANK FIRST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)


【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;

     Worst       Best
---------- ----------
       220        250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

 

1. MIN(a) 의 경우

MIN(b) KEEP(DENSE_RANK FIRST ORDER BY a)

2. MAX(a)의 경우

MAX(b) KEEP(DENSE_RANK FIRST ORDER BY a DESC)

와 같이 사용하면 a의 값에 따른 필드 b의 값을 가져 올 수 있습니다.

 

ex) table명 table1

field1    field2
1    c
2    b
3    a

SQL> select MIN(field1), MIN(field2) KEEP(DENSE_RANK FIRST ORDER BY field1) AS field2 from table1
결과>1, c

SQL> select MAX(field1), MAX(field2) KEEP(DENSE_RANK LAST ORDER BY field1) AS field2 from table1
결과> 3 , a

 

 

출처 : http://302.pe.kr/88