본문 바로가기

[LeetCode] 178. Rank Scores

by qwee0328 2025. 3. 20.

📝 178. Rank Scores

🔹 점수 순위

점수의 순위를 구하는 답을 작성하세요. 순위는 다음 규칙에 따라 계산되어야 합니다.
  • 점수는 가장 높은 것부터 가장 낮은 것까지 순위가 매겨져야 합니다.
  • 두 점수 사이에 동점이 있는 경우 두 점수 모두 동일한 순위를 가져야 합니다.
  • 동점 이후 다음 순위는 다음 연속 정수값이 되어야 한다.
즉, 순위 사이에 구멍이 없어야 합니다. 점수 기준으로 내림차순으로 정렬된 결과 테이블을 반환합니다.

 

 

📝 문제 설명

  1. 점수는 가장 높은 값부터 가장 낮은 값까지 순위를 매깁니다.
  2. 동점일 경우 같은 순위를 가집니다.
  3. 연속된 순위를 유지해야 합니다.
    • 예를 들어, 1위, 2위, 2위, 3위가 되어야 하며, 1위, 2위, 2위, 4위가 되어서는 안 됩니다.
  4. 점수 기준으로 내림차순 정렬된 결과를 반환해야 합니다.

 

📊 테이블 구조

Scores 테이블

Column Name Type
id int
score decimal

 

 

💡 SQL 문제 해결 방법

  1. DENSE_RANK() 윈도우 함수 사용
    • DENSE_RANK()는 동점이 있을 경우 같은 순위를 부여하면서 연속된 순위를 유지합니다.
    • 예를 들어, 점수가 {100, 100, 90, 85}라면 순위는 {1, 1, 2, 3}이 됩니다.
  2. 점수 기준으로 내림차순 정렬
    • ORDER BY score DESC를 사용하여 높은 점수가 먼저 나오도록 정렬합니다.

 

반응형

 

🖥️ SQL 풀이

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

 

 

🔍 쿼리 분석

  • DENSE_RANK() OVER(ORDER BY score DESC)
    • DENSE_RANK() 윈도우 함수를 사용하여 점수의 순위를 계산합니다.
    • ORDER BY score DESC를 지정하여 점수가 높은 순서대로 순위를 매깁니다.
    • 동점인 경우 같은 순위를 부여하며, 다음 순위는 연속된 정수 값이 됩니다.

 

📌 실행 예제

📊 입력 데이터

Scores 테이블

id score
1 3.50
2 3.65
3 4.00
4 3.85
5 4.00
6 3.65

 

쿼리 실행 결과

score rank
4.00 1
4.00 1
3.85 2
3.65 3
3.65 3
3.50 4
  • 순위가 건너뛰지 않고 연속적으로 유지되는 것을 확인할 수 있습니다.

 

🎯 결론

이 문제는 순위를 매기는 SQL 윈도우 함수(DENSE_RANK())를 이해하고 활용하는 방법을 익힐 수 있는 문제입니다.
특히, 동점일 때 같은 순위를 부여하면서도 연속된 순위를 유지하는 것이 핵심입니다.
일반적인 RANK() 함수와 DENSE_RANK() 함수의 차이를 비교하며 익혀두면 좋습니다! 😊

 

 


 

 

 

더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀

728x90
반응형