Database
[Oracle] Top Earners(풀이 성공)
전봇대파괴자
2021. 4. 12. 00:34
문제
다음과 같은 테이블 Employee가 주어진다.

이중 salary(월급)와 months(근속한 월수)를 곱하면 지금까지 받은 임금을 알 수 있다. 사원들 중 지금까지 가장 큰 임금을 받은 사람은 얼마를 받았는지 그 금액과, 그 임금을 받는 사람의 수를 출력하라.
Sample Input :

Sample Output :
69952 1
내 코드:
select *
from (select months*salary, count(months*salary) from employee
group by months*salary
order by months*salary desc)
where rownum=1;
Comment: group by의 활용법과 order by의 실행 순서를 잘 고려하여야 하는 문제입니다. group by를 사용하면 months*salary를 기준으로 테이블을 출력할 수 있습니다. 하지만 가장 많은 임금을 받은 사람의 데이터에 접근하기 위해서는 order by로 내림차순 정렬까지 해 주어야 합니다.
하지만 oracle 실행 순서에서 order by는 가장 뒤입니다. 때문에 from 뒤에 괄호로 order by 조건을 주어 먼저 데이터를 정렬한 후, where를 통해 가장 위의 행을 꺼내면 됩니다.