[oracle]오라클 최대값의 다른 컬럼 구하기 :: 개발/일상_Mr.lee

[oracle]오라클 최대값의 다른 컬럼 구하기

Posted by Mr.mandu.
2016. 4. 25. 04:30 개발/DB

개발을하다가 필요한 기능이라고 생각되어 적어둘까 합니다.

활용도는!!



ex) 

컬럼 : 학년, 국어점수, 수학점수, 영어점수, 사회점수

하는 컬럼이 있습니다. 

이중에서 3학년중 국어점수가 가장 높은 사람의 영어점수는??????? 요것이 궁금하다면 어떻게 해야 할까요


바로

MAX('영어점수') KEEP(DENSE_RANK FIRST ORDER BY 국어점수 DESC), 조건은 where 학년=3학년 으로 줘야 합니다.

를 이용하시면 됩니다.


예제를 통해 알아보겠습니다.


현재 테이블 상황을 알아보겠습니다.

select * from test;


위의 데이터를 보시면 test_sno가 1인 값들이 있습니다. 이중에서 testno의 값이 제일 가장 큰 값의 컬럼을 구해보겠습니다.



select

max(text) keep(dense_rank first order by testno desc) as max_text,

max(test_sno) keep(dense_rank first order by testno desc) as max_sno,

max(testno) keep(dense_rank first order by testno desc) as max_no

from test

where

test_sno=1;


위의 쿼리의 결과를 보면 아래와 같습니다.



test_sno = 1 인 값중에서

testno값이 가장큰값의 text, test_sno, testno를 구하였습니다.



즉, max(구할 컬럼) keep(dense_rank first order by 기준이되는 컬럼 desc) as max_text 입니다.


저는 특히 join처리되는 구문에서 이 기능을 유용하게 사용하였습니다.