사번 년수 등급
a1 10 10
a1 10 30
a1 5 10
위와같은 테이블에서 년수가 제일 크고 등급이 가장 좋은(여기서는 a1)을 추출하는 쿼리 부탁드립니다.
with t as ( select 'a1' sabun, 10 yr, '10' grd from dual union all select 'a2' sabun, 10 yr, '30' grd from dual union all select 'a3' sabun, 5 yr, '10' grd from dual ) select sabun from t where (yr, grd) = (select max(yr), min(grd) from t)
답변 주셔서 감사합니다.
그런데 문제는 사원데이터에서 읽어야 하므로 WITH 안에 일일히 기술하기는 어려울것 같습니다.
다시 요청드려요~~
With 문은 테스트용 자료일 뿐입니다. With문을 쓰라는게 아닙니다. 쿼리를 어떻게 작성했는지만 보시면 됩니다.
다만 요구사항이 불분명 하네요. [년수가 제일 크고 등급이 가장 좋은 사번]을 찾는데 년수가 가장 큰게 등급도 가장 좋으면 좋겠지만 항상 그러리란 법은 없죠. 년수는 큰데 등급은 낮은경우, 등급은 높은데 년수는 낮은 경우에 어떻게 하나요? 두개 기준중에 우선되는 기준이 무었인지 확실히 해야 하겠죠. 요구사항을 다음과 같이 정리하고 답변드릴께요. [년수가 제일 큰것중에 등급이 가장 좋은 사번]
WITH t AS ( SELECT 'a1' sabun, 10 yr, 10 grd FROM dual UNION ALL SELECT 'a2', 10, 30 FROM dual UNION ALL SELECT 'a3', 5, 10 FROM dual ) SELECT sabun, yr, grd FROM (SELECT sabun, yr, grd , RANK() OVER(ORDER BY yr DESC, grd DESC) rk FROM t ) WHERE rk = 1 ;