首頁 > 資料庫 > mysql教程 > 如何根據多列對 MySQL 中的行進行排名?

如何根據多列對 MySQL 中的行進行排名?

Susan Sarandon
發布: 2024-12-30 08:14:09
原創
413 人瀏覽過

How to Rank Rows in MySQL Based on Multiple Columns?

根據MySQL 中的多個欄位決定排名

查詢:

查詢:
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 
登入後複製

根據行排名在多個列(user_id 和game_id)上,同時考慮降序排列game_detail_sum,可以使用子查詢和條件 CASE 表達式:

  1. 解釋:
解釋:

子按 game_detail_的降序對每個行進行排序user_id.

外部查詢使用使用者定義的變數@r (行排名)和@u(前一個 user_id)來指派行號。
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 8 Row_Number() 函數來改進查詢:

  • MySQL 8.0 引入Row_Number()函數,允許更有效率的行編號:
附加說明:在原始方法中,在同一查詢中使用ORDER BY 和用戶變數可能無法保證正確的結果,因為優化器不可預測的評估順序。 使用 Row_Number() 改進的查詢效能更高,並提供可預測的結果為 MySQL 8 。

以上是如何根據多列對 MySQL 中的行進行排名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板