根据 MySQL 中的多个列确定排名
查询:
根据行排名在多个列(user_id 和 game_id)上,同时考虑降序排列game_detail_sum,可以使用子查询和条件 CASE 表达式:
SET @r := 0, @u := 0; SELECT @r := CASE WHEN @u = dt.user_id THEN @r + 1 WHEN @u := dt.user_id /* Notice := instead of = */ THEN 1 END AS user_game_rank, dt.user_id, dt.game_detail, dt.game_id FROM ( SELECT user_id, game_id, game_detail FROM game_logs ORDER BY user_id, game_detail DESC ) AS dt
解释:
使用 MySQL 8 Row_Number() 函数改进查询:
MySQL 8.0 引入Row_Number() 函数,允许更高效的行编号:
SELECT user_id, game_id, game_detail, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY game_detail DESC) AS user_game_rank FROM game_logs ORDER BY user_id, user_game_rank;
附加说明:
以上是如何根据多列对 MySQL 中的行进行排名?的详细内容。更多信息请关注PHP中文网其他相关文章!