排名排行榜 - MySQL

时间:2018-06-15 16:21:07

标签: mysql sql database

我有一张这样的表

+-----+-------+
| 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。你能帮忙吗?

2 个答案:

答案 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