SQL/StrataScratch

[MySQL] (Medium) Most Profitable Companies

oatmeal 2024. 1. 26. 00:18

문제: https://platform.stratascratch.com/coding/10354-most-profitable-companies?code_type=3

 

나의 풀이:

select company
     , profits as profit
from forbes_global_2010_2014
order by profit desc
limit 3;

처음에 이렇게 풀었고 정답처리가 됐다

뭔가.. 너무 쉬운데? 해서 솔루션을 봤는데

SELECT company,
       profit
FROM
  (SELECT *,
          rank() OVER (
                       ORDER BY profit DESC) as rnk
   FROM
     (SELECT company,
             sum(profits) AS profit
      FROM forbes_global_2010_2014
      GROUP BY company) sq) sq2
WHERE rnk <=3

이런 쿼리가 ㅋㅋ 엥 ㅋㅋ

 

그룹바이 컴퍼니를 해서 프로핏을 합해주길래

아 이게 10-14년도까지 연도별 프로핏이 있나? 싶어서 확인해봤는데

그건 또 아님;; 같은 컴퍼니명으로 중복된 행이 존재하지 않음

그래서 왜 굳이.. 해주는지 잘 모르겠다

생각해보니 꼭 필요한 과정이었으면 애초에 그룹별 썸을 해주지 않은 내 답은 정답이 될 수 없기도 하고?

 

이 부분은 넘어가고 또다른 부분은 바로 랭크!

하지만 이 부분도.. 덴스 랭크가 아니라 일반 랭크면 사실 내 쿼리처럼 profit desc하고 limit 하는 거랑 결과는 같음

 

다른 사이트에서 비슷한 문제를 푼 적이 있는데 그때는 꼭 덴스 랭크 여야만 했다 

문제에서 예를들어,, (말이 이상하지만) 상위 3개의 월급을 받는 사람을 찾으라고 했나 그랬는데 

월급을 랭킹으로 따지면 중복값 없이 각기 다른 3개의 월급값이 생기지만

사람은 같은 월급을 받는 사람이 중복으로 존재할 수 있기 때문에 

꼭 덴스 랭크를 해야 상위 3번째 안에 드는 월급을 받는 모든 사람을 출력했다.

그래서 상위 3개 월급 어쩌고 출력하라고 했지만 쿼리 결과는 3행 이상일 수 있는??

 

그래서 이번 문제 솔루션에서 랭크를 보고 순간 아 저번에 풀었던 그 부분을 내가 놓친건가? 했는데 그것도 아님

이번에는 덴스 랭크가 아닌 그냥 랭크!

3 most profitable companies..는 딱 3개만 보고 싶다는 의미인가보다

정답을 알고 봐서 그런지 이게 맞는 것 같기도 하고... 

근데 또 솔루션에 덴스 랭크였으면 아 그런 의미였구나 하고 또 받아들였을 것 같아서 ㅋㅋ  

다음에 비슷한 문제 풀 때 덴스 랭크와 랭크의 차이를 염두에 두고 풀어야겠다.. 라는 생각!

 

아무튼 다른 사람들 푼 거 봐도 나랑 똑같이 푼 사람이 있어서,, 그냥 쉬운 문제였던걸로,,