LeetCode178——分数排名

版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/86533646

我的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分组。

扫描二维码关注公众号,回复: 5005648 查看本文章

时间复杂度是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解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/86533646