mysql - 如何在 SQL 表中存储用户在某个级别中的排名及其分数

标签 mysql sql rank

我对所有 SQL 内容感到非常困惑,我想知道如何实现一个字段,根据玩家设置的级别和分数为玩家提供排名。

What I currently have

What I want

我不太擅长 mySQL,所以我想知道我应该如何做到这一点。

最佳答案

对于 MySql 8.0,您可以使用 rank() :

select 
  t.*, 
  rank() over (partition by t.level order by t.score DESC) `rank`
from tablename t
order by level, user

请参阅demo .
对于早期版本:

select 
  t.*,
(select count(*) from tablename where level = t.level and score > t.score) + 1 `rank`  
from tablename t 

请参阅demo .
结果:

| level | user | score | rank |
| ----- | ---- | ----- | ---- |
| 1     | A    | 10    | 3    |
| 1     | B    | 15    | 2    |
| 1     | C    | 30    | 1    |
| 2     | A    | 20    | 2    |
| 2     | B    | 10    | 3    |
| 2     | C    | 40    | 1    |

关于mysql - 如何在 SQL 表中存储用户在某个级别中的排名及其分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55772493/

相关文章:

MySQL TIMEDIFF(日期, 日期时间)

php - 在 PHP 中格式化 SQL 结果的最快方法

mysql - 如何从大表的子集中选择mysql中的n个随机行?

php - 限制php代码中数据库的数据

mysql - 编写SQL查询以返回表

mysql - 数据库设计 - 将列中的数据加倍

sql - Oracle慢RANK函数

.net - 从多个集合中获取特定元素组合排名的算法

MySQL - 按 count() 和 GROUP BY 排名

php - 如何将 MySQL 字段中的 1 或空白更改为 Y 或 N?