计算等级不起作用-MySQL

时间:2018-06-20 13:43:48

标签: mysql sql

我有一个数据库表user_points,其中包含用户的积分,并且我正在尝试根据积分计算排名。它对除具有1分的用户之外的所有用户都适用。

如果用户有1分,它的排名显示为0 ,但是它的排名应该显示为最后一个或最后一个数字,例如:12083等。

得分越高,排名也应该越高。例如:

  

1000分=等级1

     

1分=等级1223

以下是查询。

SELECT id, mobileNo, points, 
       FIND_IN_SET( points, (SELECT GROUP_CONCAT( points ORDER BY points DESC ) 
                             FROM users_points )) AS rank 
FROM users_points 
WHERE mobileNo = '03214701777'

我应该更改些什么来解决它?

1 个答案:

答案 0 :(得分:3)

SELECT a.id, a.mobileNo, a.points, 
   IFNULL((SELECT COUNT(*) AS rank
    FROM users_points b
    WHERE b.points<a.points), 0)+1 as rank
FROM user_points a
WHERE a.mobileNo  = '03214701777'

似乎就是您想要的。尽管效率仍然很低,但它比使用FIND_IN_SET()的方法要好。如果您确实想使用FIND_IN_SET(),则需要将分数填充到一致的宽度,然后除以width + 1以获得排名。