我有一个表(称为用户),我需要根据他们的得分排名用户,但我想排名的基础上,用户的最大得分。
+-----------+------------+
| User_id | Score |
+-----------+------------+
| 1 | 12258 |
| 1 | 112 |
| 2 | 9678 |
| 5 | 9678 |
| 3 | 689206 |
| 3 | 1868 |
预期结果
+-----------+------------+---------+
| User_id | Score | Rank |
+-----------+------------+---------+
| 3 | 689206 | 1 |
| 1 | 12258 | 2 |
| 2 | 9678 | 3 |
| 5 | 9678 | 3 |
2条答案
按热度按时间wn9m85ua1#
你在找什么
DENSE_RANK
,但支持8.0以上的mysql版本使用相关子查询获取
max
按每个值User_id
使用两个变量一个存储rank
另一个用于存储以前的值以使DENSE_RANK
号码。像这样。
查询1:
结果:
rqqzpn5f2#
MySQL5.7中计算密集秩的另一个技巧(如MySQL8中)是在使用变量赋值时使用case。
你可以在rextester上测试。