📝 178. Rank Scores
🔹 점수 순위
점수의 순위를 구하는 답을 작성하세요. 순위는 다음 규칙에 따라 계산되어야 합니다.
- 점수는 가장 높은 것부터 가장 낮은 것까지 순위가 매겨져야 합니다.
- 두 점수 사이에 동점이 있는 경우 두 점수 모두 동일한 순위를 가져야 합니다.
- 동점 이후 다음 순위는 다음 연속 정수값이 되어야 한다.
즉, 순위 사이에 구멍이 없어야 합니다. 점수 기준으로 내림차순으로 정렬된 결과 테이블을 반환합니다.
📝 문제 설명
- 점수는 가장 높은 값부터 가장 낮은 값까지 순위를 매깁니다.
- 동점일 경우 같은 순위를 가집니다.
- 연속된 순위를 유지해야 합니다.
- 예를 들어, 1위, 2위, 2위, 3위가 되어야 하며, 1위, 2위, 2위, 4위가 되어서는 안 됩니다.
- 점수 기준으로 내림차순 정렬된 결과를 반환해야 합니다.
📊 테이블 구조
Scores 테이블
Column Name | Type |
id | int |
score | decimal |
💡 SQL 문제 해결 방법
- DENSE_RANK() 윈도우 함수 사용
- DENSE_RANK()는 동점이 있을 경우 같은 순위를 부여하면서 연속된 순위를 유지합니다.
- 예를 들어, 점수가 {100, 100, 90, 85}라면 순위는 {1, 1, 2, 3}이 됩니다.
- 점수 기준으로 내림차순 정렬
- 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
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 608. Tree Node (0) | 2025.04.16 |
---|---|
[LeetCode] 184. Department Highest Salary (0) | 2025.03.26 |
[LeetCode] 177. Nth Highest Salary (0) | 2025.03.20 |
[LeetCode] 1965. Employees With Missing Information (0) | 2025.03.18 |
[LeetCode] 1890. The Latest Login in 2020 (2) | 2025.03.18 |