计算排名不起作用-mysql

30byixjq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(229)

我有一张table user_points 它包含了用户的积分,我正试图根据积分计算排名。它是正常工作的所有用户除了用户有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'

我应该改变什么来修复它?

wj8zmpe1

wj8zmpe11#

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\u in\u set()的方法要好。如果您真的想使用find \u in \u set(),那么您需要将分数填充到一个一致的宽度,然后除以宽度+1得到排名。

相关问题