Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie generiert man Zeilennummern innerhalb von Gruppen in MySQL?

DDD
Freigeben: 2024-11-11 17:45:02
Original
939 Leute haben es durchsucht

How to Generate Row Numbers Within Groups in MySQL?

Zeilennummer innerhalb von Gruppen in MySQL

Problem:

Erstellen Sie eine MySQL-Abfrage, um eine Zeilennummer für jede Gruppe zu generieren von Datensätzen basierend auf zwei Feldern, z. B. „crew_id“ und „type“. Die Zeilennummer sollte für jede neue Kombination aus Crew_ID und Typ zurückgesetzt werden.

Beispieldaten:

id   crew_id   amount    type
 1      4       1000      AUB
 2      4       1500      AUB
 3      5       8000      CA
 4      4       1000      CA
 5      5       1000      AUB
 6      6       3000      AUB
 7      4       2000      CA
 8      6       3500      AUB
 9      4       5000      AUB
 10     5       9000      CA
 11     5       1000      CA
Nach dem Login kopieren

Gewünschte Ausgabe:

id    crew_id   amount   type    row_number
 1      4       1000      AUB        1    
 2      4       1500      AUB        2 
 9      4       5000      AUB        3
 4      4       1000      CA         1
 7      4       2000      CA         2
 5      5       1000      AUB        1
 3      5       8000      CA         1
 10     5       9000      CA         2
 11     5       1000      CA         3
 6      6       3000      AUB        1
 6      6       3000      AUB        2
Nach dem Login kopieren

Lösung:

Um die gewünschten Zeilennummern zu erreichen, können wir eine Kombination aus einer Unterabfrage und einer CASE-Anweisung verwenden:

SELECT    id,
          crew_id,
          amount,
          type,
         ( 
            CASE type 
            WHEN @curType 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curType := type END
          ) + 1 AS rank
FROM      Table1 p,
          (SELECT @curRow := 0, @curType := '') r
ORDER BY  crew_id,type asc;
Nach dem Login kopieren

In Diese Abfrage:

  • Die Unterabfrage (SELECT @curRow := 0, @curType := '') r initialisiert zwei benutzerdefinierte Variablen: @curRow auf 0 und @curType auf eine leere Zeichenfolge.
  • Die CASE-Anweisung in der äußeren SELECT-Abfrage vergleicht die Typspalte mit @curType, um zu bestimmen, ob die aktuelle Zeile zur gleichen Gruppe gehört.

    • Wenn Typ gleich @curType ist, @curRow wird um 1 erhöht.
    • Wenn der Typ von @curType abweicht, wird @curRow auf 1 zurückgesetzt und @curType wird auf den aktuellen Typwert aktualisiert.
  • Der berechnete Wert wird dann zu 1 addiert, um die Zeilennummer zu erhalten.
  • Der Ergebnissatz wird nach Crew_ID und Typ in aufsteigender Reihenfolge sortiert.

Das obige ist der detaillierte Inhalt vonWie generiert man Zeilennummern innerhalb von Gruppen in MySQL?. 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