如何解决获取用户在评分表中的排名
SELECT id, name, score, FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM scores )
) AS rank
FROM scores
给出了这个列表:
id name score rank
1 Ida 100 2
2 Boo 58 5
3 Lala 88 4
4 Bash 102 1
5 Assem 99 3
获得单人分数:
SELECT id, name, score, FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM scores )
) AS rank
FROM scores
WHERE name = 'Assem'
给出这个结果:
id name score rank
5 Assem 99 3
您将进行一次扫描以获取分数列表,然后进行另一次扫描或尝试对它做一些有用的事情。列上的索引score
将有助于大型表的性能。
解决方法
我有一个非常简单的 MySQL 表,用于保存高分。它看起来像这样:
Id Name Score
到目前为止,一切都很好。问题是:我如何获得用户排名?例如,我有一个用户Name
或Id
想要获得他的排名,其中所有行都是按顺序降序排列的Score
.
一个例子
Id Name Score
1 Ida 100
2 Boo 58
3 Lala 88
4 Bash 102
5 Assem 99
在这种情况下,Assem
的排名将是 3,因为他获得了第三高的分数。
查询应返回一行,其中(仅)包含所需的排名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。