我如何根据使用SQL的积分数量找到用户的排行榜位置



在我的数据库中我有一个配置文件表,其中包括以下列:

Idprofilenamepointslastupdated

可以将用户多次放入配置文件表中,对于排行榜,我使用最大值(lastupdated(列的值。

下面我有SQL代码可以尝试确定某人的排行榜位置,除了1个小问题外,它起作用。

SELECT COUNT( DISTINCT  `profilename` )
FROM  `profiletable`
WHERE  `points` >= integer

如果两个人有相同的观点,那么他们具有相同的排行榜位置,但这使计数功能以我不打算的方式起作用。

例如:

position 1: profilename john points 500
position 2: profilename steve points 300
position 2: profilename alice points 300
position 4: profilename ben points 200

当我将SQL查询运行使用Integer设置为John的点时,我从Count函数中获得了1个返回值,但是当我为Steve或Alice运行SQL查询时,而不是获得2,我得到了3个。

我也尝试使用逻辑points > integer,但这是史蒂夫或爱丽丝的返回1。

如何修改SQL查询,以便计数返回正确的排行榜位置?

使用比在where子句中更大,并在计数中添加1个:

SELECT COUNT( DISTINCT  `profilename` ) + 1
FROM  `profiletable`
WHERE  `points` > integer

更新:

如果您还需要进入更新的时间字段,则首先需要获得与最后更新时间关联的记录:

SELECT COUNT(p1.`profilename` ) + 1
FROM  `profiletable` p1
LEFT JOIN `profiletable` p2 ON p1.profilename=p2.profilename
    and p1.lastupdated<p2.lastupdated
WHERE  p1.`points` > integer and p2.profilename is null

最新更新