순간을 기록으로

[MySQL] Top Earners | GROUP BY | SQL 구 작동순서 본문

Problem Solving

[MySQL] Top Earners | GROUP BY | SQL 구 작동순서

luminous13 2022. 3. 29. 14:32

문제

- 최대 총소득(maxinum total earnings)과 해당 값을 총소득으로 하는 직원의 수를 조회하세요.
- 총소득(total earnings)은 월급(salary)x월(months) 입니다.

풀이

처음에 max()함수를 생각했지만 나중에 다른 풀이를 참고하니깐 정렬과 LIMIT을 이용해서 최댓값을 구할 수 있다는 것을 배웠다.

GROUP BY를 사용하는 게 익숙하진 않지만 이해는 간다. 

 

 

select (months*salary) as earnings, count(*)
from employee
group by months*salary
order by earnings desc
limit 1;

 

배운 것

SQL 구 작동 순서

  1. FROM 구: SQL은 제일 먼저 테이블을 조회합니다. 테이블이 있어야 어떤 명령을 내릴 수 있겠죠?
  2. WHERE 구: 테이블명을 확인했으니, 테이블에서 주어진 조건에 맞는 데이터를 추출합니다.
  3. GROUP BY 구: 조건에 맞는 데이터가 추출되었으니, 공통적인 데이터를 끼리 묶어서 그룹을 만들어 줍니다.
  4. HAVING 구: 공통적인 데이터들이 묶인 그룹 중, 주어진 조건에 맞는 그룹들을 추출합니다.
  5. SELECT 구: 최종적으로 추출된 데이터들을 조회합니다.
  6. ORDER BY구: 추출된 데이터들을 정렬해줍니다. 

참고로 SELECT에서 Alias를(AS)를 만들면 SELECT 이후에 오는 구문은 ORDER BY구문 밖에 없으므로 ORDER BY에서만 사용 가능합니다.

 

GROUP BY 구조 예시

SELECT type, count(name) 
FROM TABLE
GROUP BY type;

출처: https://www.hackerrank.com/challenges/earnings-of-employees/problem?isFullScreen=true&h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen 

 

Top Earners | HackerRank

Find the maximum amount of money earned by any employee, as well as the number of top earners (people who have earned this amount).

www.hackerrank.com

 

Comments