Detailliertes Beispiel zum Abrufen des Maximalwerts jeder Gruppe nach der Gruppierung in MySQL

Detailliertes Beispiel zum Abrufen des Maximalwerts jeder Gruppe nach der Gruppierung in MySQL

Detailliertes Beispiel zum Abrufen des Maximalwerts jeder Gruppe nach der Gruppierung in MySQL

1. Die Testdatenbanktabelle sieht wie folgt aus:

Tabellentest erstellen 
( 
  `id` int ungleich null auto_increment, 
  `name` varchar(20) nicht null Standard '', 
  `score` int ungleich null, Standard 0, 
  Primärschlüssel (`id`) 
)engine=InnoDB CHARSET=UTF8; 

2. Geben Sie folgende Daten ein:

mysql> wähle * aus Test; 
+----+----------+-------+ 
| ID | Name | Punktzahl | 
+----+----------+-------+ 
| 1 | Jason | 1 | 
| 2 | Jason | 2 | 
| 3 | Jason | 3 | 
| 4 | linjie | 1 | 
| 5 | linjie | 2 | 
| 6 | linjie | 3 | 
| 7 | xiaodeng | 1 | 
| 8 | xiaodeng | 2 | 
| 9 | xiaodeng | 3 | 
| 10 | gerade | 2 | 
| 11 | gerade | 3 | 
| 12 | gerade | 1 | 
|13 | haha ​​|1 | 
|14 | haha ​​|2 | 
| 15 | dengzi | 3 | 
| 16 | dengzi | 4 | 
| 17 | dengzi | 5 | 
| 18 | shazi | 3 | 
| 19 | schazi | 4 | 
| 20 | schazi | 2 | 
+----+----------+-------+ 

3. Folgendes ist der entscheidende Punkt. Der Zweck besteht darin, nach Namen zu gruppieren und dann nach der Gruppierung die höchste Punktzahl in jeder Gruppe zu erhalten. Das SQL lautet wie folgt

Wählen Sie a.* aus Test, einem inneren Join (Wählen Sie Name, Max(Score)-Score aus Testgruppe nach Name)b auf a.
name=b.name und a.score=b.score, sortiert nach a.name; 

Natürlich kann die letzte Bestellung von a.name oben gelöscht werden

4. Die Testergebnisse sind wie folgt:

+----+----------+-------+ 
| ID | Name | Punktzahl | 
+----+----------+-------+ 
| 3 | Jason | 3 | 
| 6 | linjie | 3 | 
| 9 | xiaodeng | 3 | 
| 11 | gerade | 3 | 
|14 | haha ​​|2 | 
| 17 | dengzi | 5 | 
| 19 | schazi | 4 | 
+----+----------+-------+ 

5. Viele Methoden im Internet sind falsch, wie zum Beispiel die folgende, die nicht funktionieren, wenn sie persönlich getestet werden

Wählen Sie * aus (Wählen Sie * aus dem Test, sortieren Sie nach Punktzahl absteigend) t Gruppieren nach Namen, sortieren Sie nach Punktzahl absteigend, Limit 4; 
Wählen Sie Score, Max(Score) aus der Testgruppe nach Namen aus. 
Wählen Sie * aus dem Test, wobei die Punktzahl in (Wählen Sie max(Punktzahl) aus der Testgruppe nach Namen) liegt; 
Wählen Sie * aus dem Test, wo die Punktzahl in (Wählen Sie Teilstring_index (Group_concat (Punktzahl sortiert nach Punktzahl-Abstiegstrennzeichen ','),',',1) aus der Testgruppe nach Name); 
 
Wählen Sie * aus (Wählen Sie Name, Punktzahl, Zeilennummer () über (Gruppieren nach Name, Sortieren nach Punktzahl absteigend) als Zeilennummer aus Test) Rang, wobei Rang.Zeilennummer <= 1, Sortieren nach Rang.Punktzahl absteigend; 
 
wähle * aus (wähle StoresNo, [CustomerCaseNo], [PaymentsTime], ROW_NUMBER() über (Partition nach CustomerCaseNo, sortiert nach [PaymentsTime] desc) als Zeilennummer 
aus BAL_paymentsSwiftInfo, wobei StoresNo='zq00000034') Rangfolge, wobei ranked.rowNum <= 1, sortiert nach ranked.CustomerCaseNo, ranked.PaymentsTime, desc 
 
Wählen Sie * aus (Wählen Sie * aus der Testreihenfolge nach Punktzahl absteigend) als Gruppe nach a.name; 

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • MySql-Gruppierung und zufälliges Abrufen eines Datenelements aus jeder Gruppe
  • Implementieren Sie Group By basierend auf MySQL, um die neuesten Daten jeder Gruppe zu erhalten
  • MySQL-Unterabfragen und gruppierte Abfragen
  • MySQL-Gruppierungsabfragen und Aggregatfunktionen
  • MySql Group By implementiert die Gruppierung mehrerer Felder
  • Detaillierte Erklärung der MySQL-Gruppensortierung, um die Top N zu finden
  • Mysql verwendet eine gruppenweise Sortierung
  • Detaillierte Erklärung der MySQL-Datengruppierung

<<:  Methoden und Schritte für die verteilte Bereitstellung von Etcd basierend auf Docker

>>:  Beispielcode zum Konfigurieren von Nginx zur Unterstützung von https

Artikel empfehlen

So erstellen Sie Ihren eigenen privaten Nexus-Server unter Linux

Dieser Artikel beschreibt, wie man über Docker ei...

Schritte zum Übertragen von Dateien und Ordnern zwischen zwei Linux-Servern

Heute habe ich mich mit der Migration eines Proje...

So fügen Sie einem laufenden Docker-Container dynamisch ein Volume hinzu

Jemand hat mich schon einmal gefragt, ob es mögli...

js zum Schreiben des Karusselleffekts

In diesem Artikel wird der spezifische Code von j...

So verwenden Sie http und WebSocket in CocosCreator

Inhaltsverzeichnis 1. HttpGET 2. HTTP POST WebSoc...

Spezifische Schritte zur Verwendung des Vant-Frameworks im WeChat-Applet

Inhaltsverzeichnis 1. Öffnen Sie das Projektverze...

Lösung für das Problem der ungültigen Zeilenhöheneinstellung in CSS

Über die ungültige Zeilenhöheneinstellung in CSS ...

So installieren Sie PostgreSQL und PostGIS mit yum auf CentOS7

1. Aktualisieren Sie die Yum-Quelle Die PostgreSQ...

MySQL InnoDB MRR-Optimierungshandbuch

Vorwort MRR ist die Abkürzung für Multi-Range Rea...

Methoden des adaptiven Webdesigns (gutes Zugriffserlebnis auf Mobiltelefonen)

1. Fügen Sie dem HTML-Header das Viewport-Tag hin...

Warum MySQL Repeatable Read als Standardisolationsebene wählt

Inhaltsverzeichnis Oracle-Isolationsebenen MySQL-...

Zusammenfassung der schnellen Spaltenaddition bei MySQL 8.0 Online DDL

Inhaltsverzeichnis Problembeschreibung Historisch...