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
400 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!

sumber:php.cn
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