MYSQL 包含 SUM() 和 ORDER BY 的行序列

MYSQL row sequence with SUM() and ORDER BY

我尝试按用户的总分对我的行进行排序。

SUMORDER BY 工作正常。但我也想添加行的序列号。

当我尝试使用 @row_number 时,我得到了一些数字,但顺序不正确。

正确的 num 列顺序应该是 1,2,3,4 因为我使用的顺序是 total_point 用户点数的总和。

如何获得 num 列的正确顺序?

SELECT 
users.user_id, 
users.user_hash, 
(@row_number:=@row_number + 1) AS num,
sum(total_point) as total_point

FROM (SELECT @row_number:=0) AS t,user_stats
LEFT JOIN users on users.user_id = user_stats.stats_user_id
WHERE create_date BETWEEN "2020-04-01 00:00:00" AND "2020-04-30 23:59:59"
GROUP BY stats_user_id
ORDER BY total_point DESC

v: mysql 5.7

您必须使用 with total sorted rows 并给它们一个数字

SELECT 
    user_id,
    user_hash,
    users.user_nick,
    (@row_number:=@row_number + 1) AS num,
    total_point
FROM
    (SELECT 
        users.user_id,
        users.user_hash,
        users.user_nick,
        SUM(total_point) AS total_point
    FROM
        user_stats
    LEFT JOIN users ON users.user_id = user_stats.stats_user_id
    WHERE
        create_date BETWEEN '2020-04-01 00:00:00' AND '2020-04-30 23:59:59'
    GROUP BY stats_user_id
    ORDER BY total_point DESC) t1,
    (SELECT @row_number:=0) AS t
ORDER BY num ASC;