我有一张这样的表
+-----+-------+
| pid | score |
+-----+-------+
| 1 | 120|
| 2 | 130|
| 3 | 100|
| 1 | 120|
| 2 | 130|
| 3 | 100|
+-----+-------+
我想让我的用户排名。目前我正在使用此查询,
SELECT pid
, SUM(score) AS total_score
FROM score
GROUP
BY pid
ORDER
BY total_score DESC
我通过此查询按分数获得排序列表,但没有得到他们的位置。我想要这样的东西
+-----+-------+------+
| pid | score | rank |
+-----+-------+------+
| 2 | 260| 1 |
| 1 | 240| 2 |
| 3 | 200| 3 |
+-----+-------+------+
我可以为特定用户获得此职位吗?像
+-----+-------+------+
| pid | score | rank |
+-----+-------+------+
| 1 | 240| 2 |
+-----+-------+------+
我正在使用MySQL 5.7.21。你能帮忙吗?
答案 0 :(得分:3)
如果你有机会进入Mysql 8.0.2或更高版本,你就有了功能等级。
否则您可以使用变量来设置排名:
SELECT pid,
total_score,
@curRank := @curRank + 1 AS rank
FROM
(SELECT pid,
sum(score) AS total_score
FROM score
GROUP BY pid
ORDER BY total_score DESC) datas, (SELECT @curRank := 0) r
您可以过滤后只获取所需pid的结果
答案 1 :(得分:0)
是的,您可以使用LIMIT,如:
stringToCompare