문제
다음과 같은 테이블 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를 통해 가장 위의 행을 꺼내면 됩니다.
'Database' 카테고리의 다른 글
[MySQL]git 저장소의 DB와 로컬 DB 연결하기 (0) | 2021.05.04 |
---|---|
[Oracle]Weather Observation Station 17(풀이 성공) (0) | 2021.04.16 |
[Oracle]The Blunder(풀이 성공) (0) | 2021.04.07 |
[Oracle]Average Population of Each Continent(풀이 성공) (0) | 2021.04.01 |
[Oracle]Population Census(풀이 성공) (0) | 2021.04.01 |