我有一个表用户
Name | Poin
==================
user1 | 20
user2 | 30
user3 | 80
user4 | 60
user5 | 10
user6 | 85
我有SQL查询
SELECT *
FROM user
ORDER BY poin
看起来数据序列是基于点的。
但我需要的是这样的数据(例如,我是user1):
Position 1 : user6 - 85 point
Position 2 : user3 - 80 point
Position 3 : user4 - 60 point
您是位置5:user1-20point
我使用此sql
选择x.name,x.position
从(选择t.user,
@rownum:=@rownum+1作为位置
从用户t
加入(SELECT@rownum:=0)r
按t.poin DESC排序)x
其中x.user='user1'
这将给出user1
的当前等级:
SELECT count(*) AS rank
FROM user
WHERE poin >= (SELECT poin FROM user WHERE name = 'user1')
这个查询的一个小问题是,如果另一个用户有相同的积分,它将被分配相同的等级--它是否正确,这是有疑问的。
如果您想简单地为每个用户添加等级,请使用以下命令:
SELECT
@rank:=@rank+1 AS rank,
name,
poin
FROM user,
(SELECT @rank:=0) r
ORDER BY poin DESC
您可以使用此查询的小变化来获取单个用户的排名,但避免相同排名不明确的问题:
SELECT *
FROM (
SELECT
@rank:=@rank+1 AS rank,
name,
poin
FROM user,
(SELECT @rank:=0) r
ORDER BY poin DESC
) x
WHERE name = 'user1'