我有以下结构
国家/地区 - 用户ID - 积分
840 23 24
840 32 31
840 22 38
840 15 35
840 10 20
250 15 33
724 17 12
等
我希望得到用户在每个国家/地区的排名中的位置
我正在使用
select @rownum:=@rownum+1 Num, Country, UserId, points
from users , (SELECT @rownum:=0) r
where country=840 order by points DESC ;
我希望在他的国家/地区内获得单个用户的位置
在此示例中,在国家/地区840中,如果我选择用户ID = 23,我将获得位置4
国家/地区 - 用户ID - 积分 - 订单
840 22 38 1
840 15 35 2
840 32 31 3
840 23 24 4
840 10 20 5
答案 0 :(得分:2)
尝试做:
select * from (
select @rownum: = @rownum + 1 Num,
Country,
UserId,
points
from users, (select @rownum: = 0) r
where country = 840
order by points desc
) a
where userId = 23
答案 1 :(得分:0)
使用您的查询,您会在结果中收到行号,因此这不是您想要的。最好的方法是生成位置并将它们保存到分离的列中。通过这种方式,您可以轻松选择它,并且不需要每次都重新计算它(这非常重要)。
为此,您可以修改查询以更新行而不是选择它。