一、如图查询第N高的score

二、思路
1、创建辅助变量@temp记录当前分数,@sort记录排序
SELECT @sort:=0,@temp:=NULL;
2、使用ORDER BY进行分数排序
SELECT * FROM score s,( SELECT @sort:=0,@temp:=NULL) re ORDER BY s.score DESC;

3、使用IF函数根据分数判定排名,并更新@temp为当前分数
SELECT
s.*,
@sort:=IF(@temp=s.score,@sort,@sort+1) AS rank,
@temp:=score AS val
FROM score s,
(SELECT
@sort:=0,
@temp:=NULL) re
ORDER BY s.score DESC;

4、在排序结果中查出最终第N的分数
SELECT
score,
rank
FROM (SELECT
s.*,
@sort:=IF(@temp=s.score,@sort,@sort+1) AS rank,
@temp:=score AS val
FROM score s,
(SELECT
@sort:=0,
@temp:=NULL) re
ORDER BY s.score DESC) res
WHERE rank = 2;

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/267214.html