我尝试按用户的总点数对行进行排序。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
最新版本:mysql5.7
2条答案
按热度按时间kwvwclae1#
您必须将用于总排序行,并为它们指定一个数字
xu3bshqb2#
要在MySQL中生成一系列带有SUM列的行,并按该列对结果进行排序,可以使用ROW_NUMBER()函数和一个子查询。下面是一个示例:
此查询将为my_table中的每个组生成一个行序列,其中seq列包含行号,total列包含该组的value列的总和。这些行将按total列以升序排序。
ROW_NUMBER()函数为结果集中的每一行生成一个连续的整数值。OVER子句指定应按SUM(value)列以升序对行进行排序。GROUP BY子句按group_id列对行进行分组,SUM()函数计算每个组的value列的总和。
外部SELECT语句将内部查询 Package 在子查询中