🐬 MySQL/문제풀이

[MySQL] 해커랭크 서브쿼리 연습 (Top Earners)

xod22 2023. 1. 25. 16:21
728x90

1. 문제

We define an employee's total earnings to be their monthly salary x months  worked, and the maximum total earnings to be the maximum total earnings for any employee in the Employee table. Write a query to find the maximum total earnings for all employees as well as the total number of employees who have maximum total earnings. Then print these values as 2 space-separated integers.

 

The Employee table containing employee data for a company is described as follows:

where employee_id is an employee's ID number, name is their name, months is the total number of months they've been working for the company, and salary is the their monthly salary.

Sample Output

Explanation

The table and earnings data is depicted in the following diagram:

The maximum earnings value is 69952. The only employee with earnings=69952  is Kimberly, so we print the maximum earnings value (69952) and a count of the number of employees who have earned  (which is 1) as two space-separated values.

 

 

 

2. 내풀이

<where절 서브쿼리를 이용한 풀이>

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

-> select에 써준 alias는 where절에는 쓸 수 없지만 group by에는 써줄 수 있음

 

<having절 서브쿼리를 이용한 풀이>

SELECT months*salary as earnings
    , COUNT(*)
FROM employee
GROUP BY earnings
HAVING earnings = (SELECT MAX(months*salary) FROM employee)

-> select에 써준 alias HAVING절에 사용 가능!

 

<ORDER BY를 이용한 풀이>

SELECT salary*months AS earnings
     , COUNT(*)
FROM employee
GROUP BY earnings
ORDER BY earnings DESC
LIMIT 1

 

3. 결과

728x90