LetCode(178): 점수 순위 랭킹 랭크 스코어스(SQL)

1512 단어 LeetCodeMysql
2020.2.23 LeetCode 개인 노트 정리(지속적인 업데이트)
github:https://github.com/ChopinXBP/LeetCode-Babel
전송문:점수 랭킹
점수 순위를 위한 SQL 쿼리를 작성합니다.두 점수가 같으면 두 점수 순위(랭크)가 같다.동점 후의 다음 순위는 다음 연속의 정수치이어야 한다는 것을 주의하세요.다시 말하면 석차 사이에 간격이 있어서는 안 된다.
+----+-------+
| Id | Score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+

예를 들어, 위에서 지정한 Scores 테이블에 따라 질의가 반환되어야 합니다(높은 점수에서 낮은 점수로 정렬).
+-------+------+
| Score | Rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

#   1 2 3 4 5 6
SELECT Score,
    ROW_NUMBER() OVER (ORDER BY Score DESC) AS 'Rank'
FROM Scores;

#   1 2 3 3 3 4
SELECT Score,
    DENSE_RANK() OVER (ORDER BY Score DESC) AS 'Rank'
FROM Scores;

#   1 2 3 3 3 6
SELECT Score,
    RANK() OVER (ORDER BY Score DESC) AS 'Rank'
FROM Scores;

#               ,       ,    rank
SELECT a.Score,
    (SELECT COUNT(DISTINCT b.Score)
    FROM Scores b
    WHERE b.Score >= a.Score) AS 'Rank'
FROM Scores a
ORDER BY a.Score DESC;

#       
select  Score,
    ((CASE
    WHEN @prevRank = Score then @curRank
    WHEN @prevRank := Score then @curRank := @curRank + 1
    ELSE @curRank := @curRank +1
    END )*1) AS 'Rank'
FROM Scores,(SELECT @curRank := 0,@prevRank := NULL) p
ORDER BY Score DESC


#Coding 1시간, Copying 1초.감사합니다#

좋은 웹페이지 즐겨찾기