LeetCode178——分数排名
我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/rank-scores/description/
题目描述:
知识点:SQL变量、子查询、JOIN内连接查询
思路一:子查询查询名次
注意题目要求,名次之间不应该有“间隔”。
时间复杂度是O(n ^ 2),其中n为表中的记录数。
SQL语句:
SELECT Score, (SELECT count(DISTINCT Score) FROM Scores WHERE Score >= s.Score) AS Rank FROM Scores AS s ORDER BY Score DESC
LeetCode解题报告:
思路二:JOIN内连接查询
表的自连接查询,利用其Id分组。
时间复杂度是O(n ^ 2),其中n为表中的记录数。
SQL语句:
SELECT s.Score, COUNT(DISTINCT t.Score) AS Rank FROM Scores AS s JOIN Scores AS t ON s.Score <= t.Score GROUP BY s.Id ORDER BY s.Score DESC
LeetCode解题报告:
思路三:利用SQL变量记录上一条记录的排名
时间复杂度是O(n),其中n为表中的记录数。
SQL语句:
SELECT Score, (@rank := @rank + (@pre <> (@pre := Score))) AS Rank FROM Scores, (SELECT @rank := 0, @pre := -1) init ORDER BY Score DESC
LeetCode解题报告: