在我的数据库中我有一个配置文件表,其中包括以下列:
Id
,profilename
,points
,lastupdated
可以将用户多次放入配置文件表中,对于排行榜,我使用最大值(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