MYSQL 包含 SUM() 和 ORDER BY 的行序列
MYSQL row sequence with SUM() and ORDER BY
我尝试按用户的总分对我的行进行排序。
SUM
和 ORDER 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;
我尝试按用户的总分对我的行进行排序。
SUM
和 ORDER 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;