提问者:小点点

如何在SQL/MySQL中用ORDER BY查找行


我有一个表用户

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'


共1个答案

匿名用户

这将给出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'