mysql - SQL - 如何使用总和和顺序进行排名?

标签 mysql sql-order-by

我的 table :

USERID ------ SCORE
1999 --------  100
1999 --------  230
2000 --------  210

我有很多USERID,我需要GROUP BY USERIDSUM每个USERID的所有分数 -并做出最终的排名

我需要这个:

USERID ----- SCORE ---- USERRANK
 1999 ------ 330 ------    1
 2000 ------ 210 ------    2

有了这个:

   SELECT USERID, SUM(SCORE), (@rownum := @rownum + 1) UserRank 
   FROM RESPOSTAS GROUP BY USERID, (SELECT @rownum := 0)  
   ORDER BY SUM(SCORE) DESC 

我有:

USERID ----- SCORE ---- USERRANK
 1999 ------ 330 ------    1
 2000 ------ 210 ------    1

所有 UserID 具有相同的 UserRank..

出了什么问题?

最佳答案

您必须在外部查询中使用变量,例如:

   SELECT USERID, sum_score, 
          @rownum := @rownum + 1 AS UserRank 
   FROM (
     SELECT USERID, SUM(SCORE) AS sum_score
     FROM RESPOSTAS 
     GROUP BY USERID ) AS t
   CROSS JOIN (SELECT @rownum := 0)  AS v
   ORDER BY sum_score DESC  

Demo here

关于mysql - SQL - 如何使用总和和顺序进行排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35820414/

相关文章:

php - ORDER BY 在 PHP/MySQL 中未按预期工作

mysql - 如何回显所有行(与 DISTINCT 相关)

sql - MySQL选择其中列不为空

MySQL 导出结果

c# - ServiceStack ormLite 改变 OrderBy

MySQL 最低排序和分组依据

c# - 确定 IQueryable<T> 是否已订购

mysql - MySQL中的索引会相互干扰吗?

php - 存储多张图像

php - 如何将大文件sql导入本地mysql