내 쿼리
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 데이터 분석 캠프에서 제공하는 수업 자료의 저작권은 데이터리안에게 있으며, 자료의 무단 복제 및 배포, 상업적 이용을 금지합니다.
'🐬 MySQL > HackerRank 풀이' 카테고리의 다른 글
[HackerRank] The Blunder (Easy) (0) | 2022.09.16 |
---|---|
[HackerRank] Type of Triangle (Easy) (0) | 2022.09.15 |
[HackerRank] Weather Observation Station 6~12 (Easy) (0) | 2022.09.15 |
[HackerRank] The Report (Medium) (0) | 2022.07.19 |
[HackerRank] Challenges (Medium) (0) | 2022.07.12 |
댓글