코딩테스트/MySQL

[LeetCode] 178. Rank Scores

swwho 2025. 4. 11. 16:02
728x90
반응형

🔗 Problem Link

https://leetcode.com/problems/rank-scores/description/


❔Thinking

  • id와 score가 적힌 테이블에서, score가 높은 순서대로 순위를 매겨 반환한다.
  • 동점자는 동일한 순위를 부여하고, 순위에 간격은 없도록 한다.

💻Solution

1. Dense_Rank 함수 사용

SELECT score, DENSE_RANK() OVER (ORDER BY score DESC) AS 'rank'
FROM Scores

 

2. 함수 없이 구현

  • 자신보다 높은 점수의 개수를 순위로 활용한다.
  • DISTINCT는 동일한 점수를 한번만 세도록 한다.
  • scores 테이블이 커질수록 성능이 저하된다.
SELECT s1.score,
    (SELECT COUNT(DISTINCT score)
     FROM Scores s2
     WHERE s2.score >= s1.score) AS 'rank'
FROM Scores s1
ORDER BY s1.score DESC

🗝️keypoint

  1. RANK와 DENSE_RANK의 차이를 알아야 한다.
  2. 성능과 함께, 함수를 활용하지 않고 구현하는 방법 또한 고민해야 한다.