본문 바로가기

SQL/StrataScratch

[MySQL] Activity Rank

문제:

 

나의 풀이:

select from_user
     , count(*) as total_emails
     , rank() over (order by count(*) desc, from_user)as activity_rank
from google_gmail_emails
group by from_user;

오잉 너무 ez

 

솔루션 확인

SELECT from_user, 
       count(*) as total_emails,
       ROW_NUMBER() OVER(ORDER BY count(*) DESC, from_user ASC)
FROM google_gmail_emails 
GROUP BY from_user
ORDER BY 2 DESC, 1

솔루션은 로 넘버를 썼다,,,,,,,,!

근데 테크니컬리 로 넘버 쓰는게 맞네

 

문제에서 유니크ㄹ한 랭크값을 가져야 한다고 한 부분을 보고 

순간 덴스랭크는 중복 랭크가 있고 랭크는 중복 랭크가 없다고 생각해서 랭크를 쓴 거 였는데

 

사실 랭크도 중복 랭크가 있다;; 다만 중복 된 만큼 다음 랭크가 사라지는 거고 (1 1 3 4)

덴스 랭크는 중복과 상관없이 다음 랭크가 있는 차이인 거라 (1 1 2 3)

이번 문제에서 둘 다 적절하지 않음

 

근데 왜 정답처리가 됐을까나,,?

 

로넘버는 말 그래도 행 숫자이기 때문에 그냥 행 마다 숫자가 매겨짐

따라서 유니크한 랭크값을 보고 싶은 이 문제에 적합한 함수가 된다

 

밥오

 

문제를 잘 읽자..!