https://leetcode.com/problems/rank-scores/
解法一
考察的也是表内自连接,排序
SELECT * FROM
(SELECT B.Score,COUNT(1) AS Rank FROM
(SELECT DISTINCT Score FROM Scores) A
INNER JOIN Scores B
WHERE B.Score<=A.Score GROUP BY B.Id) C WHERE C.Rank>0 ORDER BY C.Rank
耗时:1088 ms
解法二
使用MySQL的 User-Defined Variables (用户定义变量)。
注意:FROM后有多表,用逗号隔开。
dual表是虚拟表,
DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses
SELECT s.Score, t.Rank FROM
(
SELECT @row_num:=@row_num+1 Rank,Score FROM
(SELECT DISTINCT Score FROM Scores ORDER BY Score DESC) t1
JOIN
(SELECT @row_num := 0 FROM DUAL) t2
) t, Scores s
WHERE s.Score=t.Score GROUP BY Score DESC, Rank, Id;
耗时:798 ms