我有以下数据:
enrtryid categoryid score
1 1 90.5
2 1 90.5
3 1 89
4 2 70
5 2 69
6 3 78
我希望得到以下结果:
enrtryid categoryid score rank
1 1 90.5 1
2 1 90.5 1
3 1 89 2
4 2 70 1
5 2 69 2
6 3 78 1
我尝试过使用查询
SELECT t1.*, (SELECT COUNT(*) FROM overalltally t2 WHERE t2.score> t1.score) +1
AS rank
FROM overalltally t1
ORDER BY `rank` ASC
虽然它按顺序排列所有结果,因为我不知道应该在哪里放置GROUP BY语句
答案 0 :(得分:1)
这样的事情应该有效。
SELECT t1.*, @rank := IF(@previous = t1.score, @rank, @rank + 1) AS rank,
@previous := t1.score
FROM overalltally t1, (SELECT @previous := null, @rank := 0) tmp_tbl
ORDER BY rank ASC
看起来有点棘手,但实际上它是解决MySQL中缺少排名功能的一种相当标准的方法。