1

我需要在 mysql 表中给出排名,假设有表名 test 标记为 45,55,55,65,75 那么 75 应该有排名 1 等等

原表

name  marks
tom   55
joe   56
sally 57

需要的结果

name  marks rank
tom   55     3
joe   56     2 
sally 57     1 
4

3 回答 3

3

您需要按标记对用户进行排序,然后计算他们的位置。这可以通过以下方式完成:

SET @rownum := 0;

SELECT @rownum := @rownum+1 AS rank, name, marks
FROM your_table 
ORDER BY marks DESC

灵感/来源

于 2012-05-31T12:18:21.960 回答
0

试试这个查询 -

SELECT t.* FROM (
  SELECT t1.*, @r:=@r+1 rank FROM (SELECT * FROM table ORDER BY marks DESC) t1,
  (SELECT @r:=0) t2
) t
ORDER BY marks
于 2012-05-31T12:18:58.637 回答
-1

我有一些相同的问题和答案是相同

如果您有任何疑问,请告诉我。

对于您的表查询将是

SELECT name, marks, 
(SELECT COUNT(distinct u2.marks) FROM myTable u2 
WHERE 
u2.marks > u1.marks) + 1 AS rank FROM myTable u1
ORDER BY rank DESC

在此查询中替换myTable为您的表名。

请参阅演示 1演示 2

此外,在结果中,请注意等级 3。

如果您想要排名 5 而不是 4,请使用COUNT(*)而不是COUNT(distinct u2.marks).

于 2012-05-31T12:15:41.727 回答