Heim > Datenbank > MySQL-Tutorial > Wie ordne ich Zeilen in MySQL basierend auf mehreren Spalten?

Wie ordne ich Zeilen in MySQL basierend auf mehreren Spalten?

Susan Sarandon
Freigeben: 2024-12-30 08:14:09
Original
400 Leute haben es durchsucht

How to Rank Rows in MySQL Based on Multiple Columns?

Rang basierend auf mehreren Spalten in MySQL bestimmen

Abfrage:

Rang basierend auf Zeilen Für mehrere Spalten (user_id und game_id) können Sie unter Berücksichtigung der absteigenden Reihenfolge von game_detail_sum eine Unterabfrage und verwenden Bedingte CASE-Ausdrücke:

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 
Nach dem Login kopieren

Erklärung:

  1. Die Unterabfrage ordnet die Zeilen in absteigender Reihenfolge von game_detail_sum für jede Benutzer-ID.
  2. Die äußere Abfrage verwendet die benutzerdefinierten Variablen @r (Zeilenrang) und @u (vorherige Benutzer-ID), um die Zeile zuzuweisen Zahlen.

Verbesserte Abfrage mit MySQL 8 Row_Number()-Funktion:

MySQL 8.0 führt die Row_Number()-Funktion ein, die eine effizientere Zeilennummerierung ermöglicht:

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;
Nach dem Login kopieren

Zusätzlich Hinweise:

  • Im ursprünglichen Ansatz garantiert die Verwendung von ORDER BY und Benutzervariablen in derselben Abfrage aufgrund der unvorhersehbaren Auswertungsreihenfolge des Optimierers möglicherweise keine korrekten Ergebnisse.
  • Die Verbesserung Abfragen mit Row_Number() sind leistungsfähiger und liefern vorhersehbare Ergebnisse in MySQL 8.

Das obige ist der detaillierte Inhalt vonWie ordne ich Zeilen in MySQL basierend auf mehreren Spalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage