Détermination du classement en fonction de plusieurs colonnes dans MySQL
Requête :
Pour classer les lignes en fonction sur plusieurs colonnes (user_id et game_id) en considérant l'ordre décroissant de game_detail_sum, vous pouvez utiliser une sous-requête et expressions CASE conditionnelles :
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
Explication :
Requête améliorée avec la fonction Row_Number() MySQL 8 :
MySQL 8.0 introduit la fonction Row_Number(), qui permet une numérotation des lignes plus efficace :
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;
Supplémentaire Notes :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!