본문 바로가기
Database

[Oracle] Top Earners(풀이 성공)

by 전봇대파괴자 2021. 4. 12.

문제

 

다음과 같은 테이블 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를 통해 가장 위의 행을 꺼내면 됩니다.