[Mysql] Subquery 실전 1

Alex of the year 2020 & 2021·2020년 12월 26일
0

Mysql

목록 보기
11/13
post-thumbnail

(해당 포스트는 Inflearn - [백문이불여일타] 데이터 분석을 위한 고급 SQL 강의록입니다.)

HackerRank

Top Earners

이전에 한 번 풀어본 문제를
서브쿼리를 이용해서 풀어보았다.

나의 풀이

select max(sub.year_salary), count(sub.year_salary)
from (select *, months*salary as year_salary
      from Employee) as sub
group by sub.year_salary
order by sub.year_salary desc
limit 1;

1) 우선 주어진 테이블에서 연봉 컬럼만 하나 더 붙여 서브 쿼리를 생성한 후 from 서브쿼리로 이용했다.
2) 이후 group by와 집계 함수 max, count를 이용하여 연봉의 최대값과 해당 연봉을 몇 명이 받는지를 모두 뽑은 후
3) 내림차순으로 정렬 하고
4) limit 1을 걸었다.

작성하면서도 효율이 그닥 좋지 않은 것 같다는 것을 느꼈지만
서브쿼리를 꼭 사용해야한다고 생각하니 융통성있게 생각하기 어려웠다.

해설 답안

# where절 서브쿼리 이용 풀이
select months * salary as earnings, count(*)
from employee
where months * salary = (select max(months*salary) from employee)
group by earnings

# having절 서브쿼리 이용 풀이
select months * salary as earnings, count(*)
from memployee
group by earnings
having earnings = (select max(months*salary) from employee)

아직도 서브쿼리하면 from절 서브쿼리가 가장 먼저 떠오르는 바람에 where나 having절에서 사용할 생각을 못했다. 조금 더 융통성 있는 사고가 필요한 것 같다.

profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글