在查询中添加列

时间:2016-03-09 17:23:59

标签: mysql

这是我的问题:

SET @rank=0;

SELECT @rank := @rank +1 AS rank_id, name, SUM(points) AS points
  FROM battle_points
  WHERE category =  'test'
  AND user_id !=0
  GROUP BY user_id
  ORDER BY points DESC; 

我想根据总分数添加一列rank。使用此查询,点数很好,但rank_id虚拟列不匹配。

例如,积分最多的顶级用户有rank 26,但rank_id列的值为24

如何将rank_id列与积分列匹配?

注意:虽然我完全熟悉PHP,但我只需要一个MySQL解决方案。

1 个答案:

答案 0 :(得分:1)

您在正确的路径上,但是您需要将主查询放在子查询中,以便在排名计算之前进行排序,如下所示:

SET @rank=0;
SELECT @rank := @rank +1 AS rank_id, mainQ.* 
FROM (
   SELECT name, SUM(points) AS points
   FROM battle_points
   WHERE category =  'test'
      AND user_id !=0
   GROUP BY user_id
   ORDER BY points DESC
) AS mainQ
;

修改:符合条件*mainQ.*