여기서 많은 정보를 알고가는 개발자입니다.
한가지 고민거리가 있어 이렇게 글을 남깁니다.
다른건 다 생략하고
GREATEST에서 최대값갯수와 위치를 알수있을까요
자세한건 아래 예를 참조바랍니다.
--아래--
예) GREATEST(10,2,10,4)로하면 당연히 10이 나옵니다.
제가 궁금한건 최대값이 2개다는것고 1번째와 3번째에 그값이있다는걸 어떻게 알수있을까요?
정렬하지 않았을경우입니다.
고수님의 답변 기다리겠습니다.
그럼...
SELECT v1, v2, v3, v4 , max_val , COUNT(*) max_cnt , wm_concat(seq) max_seq FROM (SELECT v1, v2, v3, v4 , LEVEL seq , DECODE(LEVEL, 1, v1, 2, v2, 3, v3, 4, v4) val , GREATEST(v1, v2, v3, v4) max_val FROM (SELECT 10 v1, 2 v2, 10 v3, 4 v4 FROM dual) CONNECT BY LEVEL <= 4 ) WHERE val = max_val GROUP BY v1, v2, v3, v4, max_val ;
SELECT v1, v2, v3, v4 , GREATEST(v1, v2, v3, v4) max_val , DECODE(GREATEST(v1, v2, v3, v4), v1, 1, 0) + DECODE(GREATEST(v1, v2, v3, v4), v2, 1, 0) + DECODE(GREATEST(v1, v2, v3, v4), v3, 1, 0) + DECODE(GREATEST(v1, v2, v3, v4), v4, 1, 0) max_cnt , SUBSTR(DECODE(GREATEST(v1, v2, v3, v4), v1, ',1') || DECODE(GREATEST(v1, v2, v3, v4), v2, ',2') || DECODE(GREATEST(v1, v2, v3, v4), v3, ',3') || DECODE(GREATEST(v1, v2, v3, v4), v4, ',4') , 2) max_seq FROM (SELECT 10 v1, 2 v2, 10 v3, 4 v4 FROM dual) ;
역쉬 마농님 멋집니다. 감사합니다 ^^