我发现了一个改编的查询,可以根据点字段选择商店排名:
SELECT *,
IF (@score=ui.points, @rank:=@rank, @rank:=@rank+1) rank,
@score:=ui.points score
FROM stores ui,
(SELECT @score:=0, @rank:=0) r
ORDER BY points DESC
如何修改此查询以选择单个商店的排名,例如其中stores.id = 2
其次,商店属于一个所有者,一个所有者可以拥有多个商店。
商店:
id, name, points, owner_id
所有者:
id, name
然后,我如何调整查询以根据店主的商店积分总分来选择店主的排名?
最佳答案
你不会。对于个人得分,只需使用不带变量的 SQL 计算排名即可。因为您正在执行“row_number()”样式计数(其中重复值获得不同的排名),所以查询为:
select count(*)
from stores s cross join
(select s.* from stores s where s.id = 2) s2
where s.points > s2.points or (s.points = s2.points and s.id >= s2.id);
关于MySQL根据分数字段选择排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678007/