【问题标题】:MYSQL row sequence with SUM() and ORDER BY带有 SUM() 和 ORDER BY 的 MYSQL 行序列
【发布时间】:2020-04-19 13:53:08
【问题描述】:

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

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

【问题讨论】:

  • 你用的是什么版本的mysql?
  • 5.7 所以我不能使用 8 的新 ROW_NUMBER 函数
  • 为什么要投反对票?有什么原因吗?
  • 没有被我否决。但我可以看到有些人可能会因为你不关注stackoverflow.com/help/how-to-ask而感到厌烦
  • 可能是因为没有数据可以重现问题。

标签: mysql sql-order-by sequence


【解决方案1】:

您必须使用总排序行并给它们一个数字

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2011-10-29
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多