🔗 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
- RANK와 DENSE_RANK의 차이를 알아야 한다.
- 성능과 함께, 함수를 활용하지 않고 구현하는 방법 또한 고민해야 한다.
'코딩테스트 > MySQL' 카테고리의 다른 글
[LeetCode] 1174. Immediate Food Delivery II (1) | 2023.12.04 |
---|---|
[LeetCode] 1280. Students and Examinations (0) | 2023.12.01 |
[Programmers] Level 2. 가격대 별 상품 개수 구하기 (0) | 2023.01.03 |
[Programmers] Level 2. 조건별로 분류하여 주문상태 출력하기 (0) | 2022.12.26 |
[Programmers] Level 2. 진료과별 총 예약 횟수 출력하기 (0) | 2022.11.30 |