获得行集中的行的排名

时间:2013-06-03 08:19:04

标签: mysql sql

我有以下几行:

id        name        score

1         Bill        0
2         Kim         8
3         Michael     30
4         Doug        22
5         Mellisa     1

当我SELECT * FROM table ORDER BY score DESC时,我得到了

id        name        score

4         Doug        22
3         Michael     30
2         Kim         8
5         Mellisa     1
1         Bill        0

现在我想只获得一行,所以我将添加一个where子句,但问题是排名。

我在我的php代码中生成了伪等级,即行集中的第一行被分配了等级1,第二行被分配了等级2,依此类推......

所以当我SELECT * FROM table WHERE id = 5时,显然所有等级信息都丢失了。如何克服这个问题?在添加where子句之前,有没有什么方法可以在rowset中获取行的位置?

2 个答案:

答案 0 :(得分:4)

将查询包装在子查询中,以便保留排名。这是一个例子,

-- the example produces rank based on highest score.
SELECT  *
FROM
        (
            SELECT  @rank := ifnull(@rank, 0) + 1 Rank,
                    Id, name, Score
            FROM    tableName a
            ORDER   BY Score DESC
        ) x
WHERE   ID = 5

答案 1 :(得分:1)

SELECT id, name, score, FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC ) 
FROM ScoreDetail)
) AS rank
FROM ScoreDetail
Where id=5

这将解决您的问题......