GREATEST 함수를 이용하여 두번째 큰 값을 가져올 수 있을 까요? 0 6 2,434

by 손님 [Oracle 기초] [2010.06.15 10:51:27]



한 컬럼에서 아닌 다른 컬럼에서 가장 큰 값을 가져오기 위한 방법을
다른 질문들을 통해 알게 되었습니다.

제가 궁금한것은 아래와 같이 두번째 큰 값을 가져오려고 합니다.
================================================================
--ORA VER : 10g

1) - 최대값 5를 가져옴.

SELECT GREATEST(1, 2, 3, 4, 5) FROM DUAL


2) - 최대값 5가 아닌 두번째 최대값을 가져오려고 함.
??

-> SELECT GREATEST(1, 2, 3, 4, 5) FROM DUAL
    WHERE GREATEST(1, 2, 3, 4, 5) <> GREATEST(1, 2, 3, 4, 5)
   실행 결과 NULL 값이 나옵니다.
================================================================

어떤 방법으로 접근해야 할까요?

by 마농 [2010.06.15 11:00:48]
SELECT LEAST
( GREATEST(v1, v2, v3, v4)
, GREATEST(v1, v2, v3, v5)
, GREATEST(v1, v2, v4, v5)
, GREATEST(v1, v3, v4, v5)
, GREATEST(v2, v3, v4, v5)
) v
FROM (SELECT 1 v1, 2 v2, 3 v3, 4 v4, 5 v5 FROM dual)
;

by 마농 [2010.06.15 11:16:37]
동순위 처리를 어떻게 할지 생각해 보셔야 할듯 하네요.

by 질문자 [2010.06.15 14:12:51]
마농님 답변 감사합니다.
동순위 처리라면 이와 같은 상황을 말씀하신건가요?
--------------------------------------------------------
SELECT LEAST
( GREATEST(v1, v2, v3, v5)
, GREATEST(v1, v2, v3, v5)
) v
FROM (SELECT 1 v1, 2 v2, 3 v3, 4 v4, 5 v5 FROM dual);
--------------------------------------------------------

by 마농 [2010.06.15 14:41:31]
동순위라 함은 1, 3, 3, 5, 5 와 같은 상황이죠.
순위를 메기면 5, 3, 3, 1, 1 이 되죠. 1등이 2건, 3등이 2건 5등 한건
2등인 자료는 없죠. 이때 나와야 하는 결과가 5인지? 3인지? 없는지?

by 질문자 [2010.06.15 14:59:30]
아.. 1, 3, 3, 5, 5 같은 동순위 상황은 없습니다.
해당 로우에 구분자 값을 이용해 한 로우의 여러 컬럼을 비교하는 것 뿐이니까요..

ex) 1, 2, 3, 4, 5, 구분자(UNIQUE)

예외적인 상황까지 고려해주신점 감사합니다. ^_^

by 마농 [2010.06.15 15:15:06]
혹시라도, 5개 행을 한 행으로 합쳐 놓고 다시 작업하시는 것라면?
처음부터 5개 행을 가지고 검색 하시는게 낫겠죠.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입