[oracle]오라클 최대값의 다른 컬럼 구하기
개발을하다가 필요한 기능이라고 생각되어 적어둘까 합니다.
활용도는!!
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처리되는 구문에서 이 기능을 유용하게 사용하였습니다.
'개발 > DB' 카테고리의 다른 글
[oracle]오라클 정규식 REGEXP_LIKE (0) | 2016.05.07 |
---|---|
[oracle] 정규식 REGEXP_REPLACE 함수 (6) | 2016.05.04 |
[oracle]오라클 ibatis iterate conjunction (0) | 2016.05.01 |
[oracle] 정규식REGEXP_INSTR 함수 (0) | 2016.04.09 |
[sql]쿼리 dml, ddl, dcl 등 (0) | 2016.04.08 |
[oracle] 표현식 (0) | 2016.04.07 |
[mysql] 특정 ip 접근권한 설정 (0) | 2016.04.02 |