본문 바로가기
🐬 MySQL/HackerRank 풀이

[HackerRank] Top Earners (Easy)

by Chloe._. 2022. 7. 8.

내 쿼리

SELECT MAX(months*salary), COUNT(employee_id)
FROM Employee
WHERE months*salary = (SELECT MAX(months*salary) FROM Employee)

WHERE절 서브쿼리에서 earnings의 MAX와 일치(=)하라는 조건을 넣었고,

바깥SELECT절에서는 단일값이 출력되는 MAX()와 COUNT() 함수를 썼다.

GROUP BY를 따로 하진 않았는데...

 

다른 풀이1: GROUP BY + WHERE절 서브쿼리

SELECT months*salary AS earnings, COUNT(*)
FROM Employee
WHERE months*salary = (SELECT MAX(months*salary) FROM Employee)
GROUP BY earnings

GROUP BY를 하면서 SELECT절엔 GROUP BY의 기준컬럼과 집계함수를 넣어줬다.

서브쿼리 안엔 SELECT절에서 만든 Alias를 못쓰는게 신기하다.

서브쿼리는 메인쿼리보다 먼저, 독립적으로 돌기 때문인 거 같다.

 

다른 풀이2: GROUP BY + HAVING절 서브쿼리

SELECT months*salary AS earnings, COUNT(*)
FROM Employee
GROUP BY earnings
HAVING earnings = SELECT MAX(months*salary) FROM Employee

WHERE절이랑 내용은 같은데, 조건을 먼저 걸고 그룹바이할지, 그룹바이한거에서 필터링을 할지 쿼리실행순서의 차이.

여기선 Alias 쓸 수 있다.

 

 

본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.
SQL 데이터 분석 캠프에서 제공하는 수업 자료의 저작권은 데이터리안에게 있으며, 자료의 무단 복제 및 배포, 상업적 이용을 금지합니다.

댓글