내배캠/TIL

[TIL/24-01-09]

PARK JI HO 2024. 1. 9. 20:46

해커랭크 : TOP Earners

 

months* salary를 해서 가장 높은 사람의 수를 세는 문제

샘플 출력 :

69952 1

 

1.

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

샘플 출력을 보면 (가장 높은 금액  1) 이런 식으로 출력을 해야 한다.

months * salary를 해주고 그 값들로 group by를 해주고 카운트를 했다.

그러면 각 값별로 카운트가 되었을 것이고 내림차순을 한 다음 하나만 추출하면 가장 높은 금액이 나오게 된다

 

2.

 

select max(sub.earnings), sub.cnt
from
(select months * salary as earnings, count(*) as cnt
from employee
group by earnings)sub
group by earnings
order by 1 desc
limit 1

from절 서브쿼리를 이용해서도 풀어봤다.

서브쿼리 안에서 earnings와 액수별로 카운트를 해준 다음 서브쿼리 밖에서 max를 통해 가장 높은 금액을 뽑았다.

그다음은 정렬 후 limit 1

 

3.

select months * salary as earnings , count(*)
from employee
where months * salary = (select max(salary * months) from employee)
group by earnings

이번엔 where 절에 서브쿼리를 이용했는데

months * salary 조건을 서브쿼리로 max(salary * months)를 줬다.

 

해커랭크 문제를 풀기 시작했는데 영어라서 문제 읽기가 너무 힘들다 ........

한글로 번역하면 내가 작성하는 쿼리들도 한글로 번역되면서 막 글자가 왔다갔다 이상해진다 ㅜㅜ

자동완성 기능도 없고 실행 속도도 너무 느리다..

solvesql 최고