我有一张名为'highscores'的表,看起来像这样。
id udid name score
1 1111 Mike 200
2 3333 Joe 300
3 4444 Billy 50
4 0000 Loser 10
5 DDDD Face 400
鉴于特定的udid,我想按其得分值返回该行的等级。
即。如果udid给定= 0000,我应该返回5.
知道如何为MySQL数据库编写此查询吗?
答案 0 :(得分:7)
MySQL没有任何分析/排名功能,但您可以使用变量人为创建排名值:
SELECT t.id,
t.udid,
t.name,
t.score,
@rownum := @rownum + 1 AS rank
FROM HIGHSCORES t
JOIN (SELECT @rownum := 0) r
ORDER BY t.score DESC
要查看与UDID
“0000”相关联的排名,请使用:
SELECT MAX(x.rank) AS rank
FROM (SELECT t.id,
t.udid,
t.name,
t.score,
@rownum := @rownum + 1 AS rank
FROM HIGHSCORES t
JOIN (SELECT @rownum := 0) r
ORDER BY t.score DESC) x
WHERE x.udid = '0000'
如果用户有多个高分值,则需要MAX
。或者,您无法使用MAX
并使用ORDER BY rank LIMIT 1
。
答案 1 :(得分:1)
重申OMG的优秀答案,即每个udid多个高分的一般情况,这里的查询基于每个udid只有一个条目的前提条件:
SELECT rank
FROM
(SELECT @rownum := @rownum + 1 AS rank, score, udid
FROM highscores
JOIN (SELECT @rownum := 0) r
ORDER BY highscores.score DESC) x
WHERE x.udid = '0000'