MySQL根据分数字段选择排名

标签 mysql

我发现了一个改编的查询,可以根据点字段选择商店排名:

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/

相关文章:

php - 如何解决下面的查询以及使用 IN 运算符的目的是什么

php - 循环数据库数据以在同一字段的单行中显示的任何有效方法?

php - 显示包含其他内容的 BLOB 图像

php - 如何从 MySQL PHP 中检索图像

javascript - 使用 php 进行数据列表选择

Php 插入/更新多行,使用数组而不是 foreach

java - 如何回滚一次插入到 3 个表中的数据?

php - MYSQL PHP通过html形式更新db表信息

PHP重定向到多个页面

MySQL编辑器