按组排名结果并使用MySQL允许联系

时间:2015-11-11 15:26:29

标签: mysql

我有以下数据:

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语句

1 个答案:

答案 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中缺少排名功能的一种相当标准的方法。