SQL/HackerRank(해커랭크)

HackerRank(해커랭크) MySQL Top Earners 문제 답

진리뷰 2023. 10. 4. 09:00
반응형

 

 

HackerRank(해커랭크)-MySQL-Top-Earners-문제-답-썸네일
Top Earners 정리

 

 

*MySQL 버전, 집계 함수(Aggregation) 문제입니다.

 

 

 

해커랭크 Top Earners 문제, 샘플, 설명

 

  • 문제 의도: aggregation 사용
  • 직원들의 총수입(salary*months) 구하기
  • 최고 총 수입액 구하기
  • 최고 총 수입액 직원 수 구하기
  • 결과값 사이에 공백 두기

 

해커랭크-top-earners-문제
Top Earners 문제

 

 

대충 샘플에서는 최고 수입액이 69952인데 카운트해보니 킴벌리 혼자라는 말.

해커랭크-top-earners-문제-설명
Top Earners 결과 샘플, 설명

 

 

 

해커랭크 Top Earners 답

 

  • GROUP BY 1: 총 수입액 기준, 직원 수 카운트 해야하기 위함
  • 내림차순 정렬 및 LIMIT 1: 최고 총 수입액 구하기 위함
  • 결과값들 사이에 공백 두는 것 때문에 CONCAT 사용하려 했으나, 아래 쿼리로도 결과가 같아서 정답.

 

# total earnings: monthly salary*months

SELECT salary*months
, COUNT(salary*months)
FROM Employee
GROUP BY 1
ORDER BY 1 DESC
LIMIT 1;

 

 

 

추가 정리

 

조금이라도 더 줄인 쿼리.

SELECT salary*months
, COUNT (*)
FROM Employee
GROUP BY 1
ORDER BY 1 DESC
LIMIT 1;

 

내림차순과 LIMIT 대신 MAX사용, 그리고 요구에 따라 CONCAT 사용.

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

 

두 쿼리의 종합 버전(CONCAT 미사용)

SELECT salary*months
, COUNT(*)
FROM Employee
WHERE (salary*months) = (SELECT MAX(salary*months) FROM Employee)
GROUP BY 1;
반응형
top