Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Kedudukan Baris dalam MySQL Berdasarkan Berbilang Lajur?

Bagaimana untuk Kedudukan Baris dalam MySQL Berdasarkan Berbilang Lajur?

Susan Sarandon
Lepaskan: 2024-12-30 08:14:09
asal
430 orang telah melayarinya

How to Rank Rows in MySQL Based on Multiple Columns?

Menentukan Kedudukan Berdasarkan Berbilang Lajur dalam MySQL

Pertanyaan:

Untuk menyusun baris berdasarkan pada berbilang lajur (user_id dan game_id) sambil mempertimbangkan susunan menurun game_detail_sum, anda boleh gunakan subkueri dan ungkapan CASE bersyarat:

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 
Salin selepas log masuk

Penjelasan:

  1. Subkueri menyusun baris dalam susunan menurun permainan_detail_sum untuk setiap user_id.
  2. Pertanyaan luar menggunakan pembolehubah yang ditentukan pengguna @r (kedudukan baris) dan @u (id_pengguna sebelumnya) untuk menetapkan nombor baris.

Pertanyaan yang Diperbaiki dengan Fungsi MySQL 8 Row_Number():

MySQL 8.0 memperkenalkan Row_Number() fungsi, yang membolehkan baris yang lebih cekap penomboran:

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;
Salin selepas log masuk

Nota Tambahan:

  • Dalam pendekatan asal, menggunakan ORDER BY dan pembolehubah pengguna dalam pertanyaan yang sama mungkin tidak menjamin hasil yang betul kerana kepada susunan penilaian yang tidak dapat diramalkan oleh pengoptimum.
  • Pertanyaan yang dipertingkatkan menggunakan Row_Number() adalah lebih berprestasi dan memberikan hasil yang boleh diramal dalam MySQL 8 .

Atas ialah kandungan terperinci Bagaimana untuk Kedudukan Baris dalam MySQL Berdasarkan Berbilang Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan