Detaillierte Verwendung der MySQL-Funktionen row_number() und over()

Detaillierte Verwendung der MySQL-Funktionen row_number() und over()

Syntaxformat: row_number() über (Partition durch Gruppieren der Spaltenreihenfolge durch Sortieren der Spalten absteigend)

row_number() over() Gruppierungssortierfunktion:

Bei Verwendung der Funktion row_number() over() werden die Gruppierung und Sortierung in over() später ausgeführt als die Funktionen where, group by und order by.

Beispiel 1:

Tabellendaten:

Tabelle TEST_ROW_NUMBER_OVER erstellen(
       id varchar(10) ungleich null,
       Name varchar(10) null,
       Alter varchar(10) null,
       Gehalt int null
);
wähle * aus TEST_ROW_NUMBER_OVER t;
 
einfügen in TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,'a',10,8000);
einfügen in TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,'a2',11,6500);
einfügen in TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,'b',12,13000);
einfügen in TEST_ROW_NUMBER_OVER(id,name,alter,gehalt) Werte(2,'b2',13,4500);
einfügen in TEST_ROW_NUMBER_OVER(id,name,alter,gehalt) Werte(3,'c',14,3000);
einfügen in TEST_ROW_NUMBER_OVER(id,name,alter,gehalt) Werte(3,'c2',15,20000);
einfügen in TEST_ROW_NUMBER_OVER(id,name,age,salary) values(4,'d',16,30000);
einfügen in TEST_ROW_NUMBER_OVER(id,name,alter,gehalt) Werte(5,'d2',17,1800);

Einmal sortieren: Sortiert die Abfrageergebnisse (keine Gruppierung)

wähle ID, Name, Alter, Gehalt, Zeilennummer () über (sortiere nach Gehalt absteigend) rn
von TEST_ROW_NUMBER_OVER t

Ergebnis:

Weitere Sortierung: Sortieren nach ID-Gruppe

Wählen Sie ID, Name, Alter, Gehalt, Zeilennummer () über (Partition nach ID, Sortierung nach Gehalt absteigend) Rang
von TEST_ROW_NUMBER_OVER t

Ergebnis:

Erneut sortieren: Suchen Sie in jeder Gruppe die Daten mit der Sequenznummer 1

Wählen Sie * aus (Wählen Sie ID, Name, Alter, Gehalt, Zeilennummer () über (Partition nach ID, Sortierung nach Gehalt absteigend) Rang
von TEST_ROW_NUMBER_OVER t)
wobei Rang <2

Ergebnis:

Sortieren Sie, um Daten zwischen 13 und 16 Jahren zu finden, sortieren Sie nach Gehalt

Wählen Sie ID, Name, Alter, Gehalt, Zeilennummer () über (Sortierung nach Gehalt absteigend) Rang
von TEST_ROW_NUMBER_OVER t, wobei das Alter zwischen ‚13‘ und ‚16‘ liegt

Ergebnis: Die Rangnummer im Ergebnis gibt tatsächlich an, dass over(order by salary desc) ausgeführt wird, nachdem das Alter zwischen und

Beispiel 2:

1. Verwenden Sie die Funktion row_number() zum Nummerieren, z. B.

Wählen Sie E-Mail, Kunden-ID, ROW_NUMBER() über (Sortieren nach PSD) als Zeilen aus QT_Customer

Prinzip: Zuerst nach PSD sortieren und nach dem Sortieren die einzelnen Daten nummerieren.

2. Sortieren Sie die Bestellungen in aufsteigender Reihenfolge nach Preis und sortieren Sie jeden Datensatz. Der Code lautet wie folgt:

Wählen Sie DID, customerID, totalPrice, ROW_NUMBER() über (Sortieren nach totalPrice) als Zeilen aus OP_Order

3. Zählen Sie alle Bestellungen jedes Haushalts, sortieren Sie sie in aufsteigender Reihenfolge nach der Höhe der Bestellung jedes Kunden und nummerieren Sie die Bestellungen jedes Kunden. Auf diese Weise können Sie erfahren, wie viele Bestellungen jeder Kunde aufgegeben hat:

Wählen Sie ROW_NUMBER() über (Partition nach Kunden-ID, Sortierung nach Gesamtpreis)
 als Zeilen, Kunden-ID, Gesamtpreis, DID aus OP_Order

4. Zählen Sie die Anzahl der Bestellungen, die jeder Kunde kürzlich aufgegeben hat:

mit Tabs als  
(  
Wählen Sie ROW_NUMBER() über (Partition nach Kunden-ID, Sortierung nach Gesamtpreis)
 als Zeilen, Kunden-ID, Gesamtpreis, DID aus OP_Order  
 )  
Wählen Sie MAX(Zeilen) als „Anzahl der Bestellungen“, Kunden-ID aus den Registerkarten 
Gruppieren nach Kunden-ID

5. Zählen Sie den niedrigsten Kaufbetrag aller Bestellungen jedes Kunden und zählen Sie auch die Anzahl der vom Kunden in dieser Bestellung getätigten Käufe:

Idee: Verwenden Sie eine temporäre Tabelle, um diesen Vorgang durchzuführen.

1. Zuerst nach Kunde gruppieren, dann nach Bestellzeitpunkt des Kunden sortieren und nummerieren.

2. Verwenden Sie dann die Unterabfrage, um den Mindestpreis für den Einkauf jedes Kunden herauszufinden.

3. Suchen Sie die entsprechenden Datensätze basierend auf dem Mindestpreis jedes Kunden.

    mit Tabs als  
     (  
    Wählen Sie ROW_NUMBER() über (Partition nach Kunden-ID, Sortierung nach insDT) 
als Zeilen, Kunden-ID, Gesamtpreis, DID aus OP_Order  
    )  
     Wählen Sie * aus den Registerkarten  
    wobei totalPrice in   
    (  
    Wählen Sie MIN(Gesamtpreis) aus der Registerkartengruppe nach Kunden-ID  
     )

6. Filtern Sie die ersten von Kunden aufgegebenen Bestellungen heraus.

Ideen. Verwenden Sie rows=1, um den ersten Bestelldatensatz des Kunden abzufragen.

    mit Tabs als  
    (  
    Wählen Sie ROW_NUMBER() über (Partition nach Kunden-ID, Reihenfolge nach insDT) als Zeilen,* aus OP_Order  
    )  
    Wählen Sie * aus den Registerkarten mit den Zeilen = 1 
    Wählen Sie * aus OP_Order

7. Hinweis: Bei der Verwendung von Fensterfunktionen wie „over“ werden die Gruppierung und Sortierung in „over“ später ausgeführt als die Ausführung von „where, group by, order by“.

    wählen   
    ROW_NUMBER() über (Partition nach Kunden-ID, Reihenfolge nach insDT) als Zeilen,  
    Kunden-ID, Gesamtpreis, DID  
    von OP_Order, wobei insDT>'2011-07-22'

Dies ist das Ende dieses Artikels über die detaillierte Verwendung der MySQL-Funktionen row_number() und over(). Weitere Informationen zu den MySQL-Funktionen row_number() und over() finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Erklärung zur Verwendung von PostgreSQL ROW_NUMBER() OVER()
  • row_number() und unterschiedliche Verwendung in PostgreSQL
  • Unterschiede bei der Verwendung von Postgresql rank() over, dense_rank() und row_number()
  • Implementierungsprozess von row_number in MySQL
  • Detaillierte Beispiele für die allgemeine Verwendung der Funktion row_number in SQL Server
  • Einführung in die Verwendung der vier wichtigsten SQL-Rankingfunktionen ROW_NUMBER, RANK, DENSE_RANK, NTILE
  • Fallstudie zu den SQL ROW_NUMBER()- und OVER()-Methoden

<<:  Detaillierte Erläuterung der Lösung zum reibungslosen Upgrade der Nginx-Version

>>:  Detaillierte Erklärung des alternativen Implementierungscodes der vertikalen Zentrierung in CSS (unkonventionell)

Artikel empfehlen

Natives JS zum Erstellen eines verschiebbaren Anmeldefelds

Dieser Artikel zeigt ein verschiebbares Anmeldefe...

MySQL-Lernaufzeichnung: Blutiger Vorfall durch KEY-Partition verursacht

Nachfragehintergrund Ein Teil der Daten in der Ge...

CSS-Anfänger-Tutorial: Hintergrundbild füllt den gesamten Bildschirm

Wenn Sie möchten, dass die gesamte Benutzeroberfl...

Modulare CSS-Lösung

Es gibt wahrscheinlich ebenso viele modulare Lösu...

Reines CSS, um coole Neonlichteffekte zu erzielen (mit Demo)

Ich habe kürzlich die Tutorial-Reihe zu CSS-Anima...

Exquisiter Snake-Implementierungsprozess in JavaScript

Inhaltsverzeichnis 1. HTML-Struktur erstellen 2. ...

Verwenden Sie CSS, um einen kreisförmigen Welleneffekt zu erzielen

Auf Mobilgeräten sehe ich häufig kreisförmige Wel...

Mehrere Möglichkeiten zum Ausblenden von HTML-Elementen

1. CSS verwenden Code kopieren Der Code lautet wie...

Wie kompliziert ist die Priorität von CSS-Stilen?

Gestern Abend habe ich mir eine Interviewfrage ang...

js Promise-Methode zur gleichzeitigen Steuerung

Inhaltsverzeichnis Frage Hintergrund Idee & U...

HTML als Startseite festlegen und zu Favoriten hinzufügen_Powernode Java Academy

So implementieren Sie die Funktionen „Als Startse...

onfocus="this.blur()" wird von blinden Webmastern gehasst

Als er über die Seite zur Bedienung der Bildschir...

Vue verwendet Mixins zur Optimierung von Komponenten

Inhaltsverzeichnis Mixins-Implementierung Zusamme...