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

Wie ordne ich Benutzer basierend auf mehreren Spalten in MySQL ein?

DDD
Freigeben: 2024-12-29 09:45:10
Original
252 Leute haben es durchsucht

How to Rank Users Based on Multiple Columns in MySQL?

Rang basierend auf mehreren Spalten in MySQL bestimmen

Beim Arbeiten mit Daten in MySQL ist es oft notwendig, den Rang von Zeilen basierend zu bestimmen nach bestimmten Kriterien. In diesem Fall besteht die Aufgabe darin, die Benutzer auf der Grundlage der Benutzer-ID und der Spiel-ID zu bewerten, wobei die Rangfolge in absteigender Reihenfolge der Spieldetails geordnet wird.

Um dieses Problem zu lösen, verwenden wir eine Unterabfrage, um die Daten wie folgt zu ordnen dass alle Zeilen mit der gleichen Benutzer-ID gruppiert werden und eine weitere Sortierung zwischen ihnen basierend auf Spieldetails in absteigender Reihenfolge erfolgt. Dann verwenden wir bedingte CASE..WHEN-Ausdrücke, um die Zeilennummerierung auszuwerten und Benutzerspielränge zuzuweisen.

Die folgende SQL-Abfrage bietet eine Lösung:

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

In der Abfrage verwenden wir Benutzerdefinierte Variablen @r und @u, um Zeilenrankings und Benutzer-IDs zu verfolgen. Wir stellen sicher, dass die Auswertung von user_game_rank und der Benutzer-ID-Zuweisung zu @u innerhalb desselben Ausdrucks erfolgt, um ihre korrekte Reihenfolge beizubehalten.

Das Ergebnis dieser Abfrage liefert die Benutzerspielränge wie gewünscht:

| user_game_rank | user_id | game_detail | game_id |
| -------------- | ------- | ----------- | ------- |
| 1              | 6       | 260         | 11      |
| 2              | 6       | 100         | 10      |
| 1              | 7       | 1200        | 10      |
| 2              | 7       | 500         | 11      |
| 3              | 7       | 260         | 12      |
| 4              | 7       | 50          | 13      |
Nach dem Login kopieren

Für MySQL 8.0 und höher ist die Verwendung der Funktion Row_Number() ein effizienterer Ansatz, mit der Zeilenrankings basierend auf den angegebenen Werten direkt berechnet werden können Kriterien:

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

Diese Abfrage liefert die gleiche Ausgabe wie die vorherige, bietet jedoch eine verbesserte Leistung und ist die empfohlene Methode für das Zeilenranking in MySQL 8.0.

Das obige ist der detaillierte Inhalt vonWie ordne ich Benutzer basierend auf mehreren Spalten in MySQL ein?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage