这是我的问题:
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解决方案。
答案 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.*
。