如何在一个MYSQL查询中对行号进行排序和获取

时间:2016-07-05 14:10:41

标签: mysql

我有一张ID与积分表,我想根据他的积分返回所需身份证的等级。我想我可以这样做,如果我可以根据点对表进行排序,然后选择所需的id的行号。问题是我不知道如何在一个查询中执行这两个操作(对表进行排序,然后选择行号)。

注意:我使用php prepared语句来执行查询。

有关如何一步完成两项操作的任何帮助。

数据样本:

ID     Points
x      12
y      15
w      4 
z      30

必需:

to return the rank of any ID. example.. Where Id = y --> it returns "2". (the rank in the table)

更新

我执行了以下代码并对表进行排序并正确排名,我现在需要选择所需的ID(ID = x)。怎么做?

SET @rank=0;
SELECT ID, Points, @rank:=@rank+1 AS rank From Cars ORDER BY Points DESC;

2 个答案:

答案 0 :(得分:1)

此示例可以帮助您

 mysql> SELECT ID,points, @curRank := @curRank + 1 as rank from gg ,(SELECT @curRank := 0) r order by points;
+------+--------+------+
| ID   | points | rank |
+------+--------+------+
| w    |      4 |    1 |
| x    |     12 |    2 |
| y    |     15 |    3 |
| z    |     30 |    4 |
+------+--------+------+
4 rows in set (0.00 sec)

答案 1 :(得分:0)

您可以使用子查询在MySQL中实现官方ANSI排名函数:

select t.*,
       (select 1 + count(*)
        from t t2
        where t2.points < t.points
       ) as rank
from t;

这也可以使用变量来完成,但它相当复杂。