MySQL排名查询。获取特定成员的职位

时间:2018-03-15 12:10:22

标签: mysql sql

我的DataBase上有以下表格: TimeRank(用户ID,姓名,时间)

我想按时间排序表并获取表格中特定ID的位置,例如:

第68位用户位于第3位。

我只需要执行一个返回用户位置的查询。

MySQL没有函数row_number,所以我不知道怎么做。

2 个答案:

答案 0 :(得分:0)

SELECT x.user-id, 
       x.name,
       x.time,
       x.position
  FROM (SELECT t.user-id,
               t.name,
               t.time,
               @rownum := @rownum + 1 AS position
          FROM TABLE TimeRank t
          JOIN (SELECT @rownum := 0) r
          ORDER BY t.time) x
 WHERE x.user-id = 123

替代:

SELECT user-id,
       (SELECT COUNT(*) FROM TimeRank WHERE time <= (SELECT time FROM TimeRank WHERE user-id = 123)) AS position,
       time,
       name
FROM TimeRank
WHERE user-id = 123

答案 1 :(得分:0)

您可以使用变量

生成位置列
set @pos=0;

select pos,user_id
from (select @pos:=@pos+1 pos,user_id from TimeRank order by time) s
where user_id=68;

如果需要考虑索引,可以在表中添加一列并使用

进行更新
set @pos=0;

update TimeRank set position=(@pos:=@pos+1) order by time;