在我的数据库中,我有一个配置文件表,其中包含以下列:
Id
,profilename
,points
,lastupdated
可以多次将用户放入配置文件表中,对于排行榜,我使用max(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查询以便计数返回正确的排行榜位置?
答案 0 :(得分:1)
使用大于where子句的大于1并向计数添加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