1

我有一张桌子:

**user**
id, name, points

您能否建议我如何编写查询以按点获取用户位置。

例如:

1, 'David', 5
2, 'Dmitry', 10
3, 'Monica', 15
4, 'Jeniffer', 7
5, 'Andy', 12

用户“Monica”根据积分获得第一名,“Jeniffer” - 第四名,依此类推。

谢谢你的建议!

编辑

我想要一个像这样的查询:

SELECT rank FROM user ... WHERE id = 3;
rank |
1

SELECT rank FROM user ... WHERE id = 5;
rank |
2
4

6 回答 6

1
select * from user order by points desc
于 2012-06-27T04:38:43.577 回答
1

请尝试以下方法:

SELECT
   id,rank, name,point 
FROM (
    SELECT id,
        name,
        point,  
        @rank := @rank + 1 as rank        
    FROM (
      SELECT * from tblA ORDER by point desc) As a, 
    (SELECT @rank := 0) AS vars      

) T 
WHERE id=1

http://sqlfiddle.com/#!2/581fc/9

于 2012-06-27T06:04:39.170 回答
1

试试这个:

select t.rank from (
      select @i := @i + 1 as rank, id, name, points
        from MyUser x,(SELECT @i:=0) foo 
    order by x.points desc) T
 where T.id = 3
于 2012-06-27T06:16:55.520 回答
0

使用这种方式:

SELECT * FROM `user` ORDER BY `points` DESC;

如果你想单独获得第一名,你可以使用这个:

SELECT * FROM `user` ORDER BY `points` DESC LIMIT 1;
于 2012-06-27T04:40:07.090 回答
0
set @rank := 0;
select *, (@rank := @rank + 1) as rank
from (select * from user order by points desc) x
where id = 3
于 2012-06-27T04:47:50.053 回答
0
with cte as(
select *,RANK() over(order by points desc) as rnk from user_ 
)
select rnk [rank] from cte where id=3
于 2012-06-27T06:43:58.887 回答