Heim > Datenbank > MySQL-Tutorial > Wie finde ich Zeilen mit maximalen Spaltenwerten, die durch eine andere Spalte in MySQL unterteilt sind?

Wie finde ich Zeilen mit maximalen Spaltenwerten, die durch eine andere Spalte in MySQL unterteilt sind?

Susan Sarandon
Freigeben: 2025-01-25 06:46:08
Original
383 Leute haben es durchsucht

How to Find Rows with Maximum Column Values, Partitioned by Another Column in MySQL?

MySQL gruppiert nach einer anderen Spalte, um die Zeile mit dem größten Spaltenwert zu finden

In einer Datenbank ist das Finden der Zeile mit dem größten Wert, gruppiert durch eine andere Spalte, eine häufige analytische Aufgabe. In MySQL kann dies durch die Kombination von Aggregation und Filterung erreicht werden.

In diesem Artikel wird das Problem des Abrufens von Zeilen aus einer Tabelle untersucht, die den Maximalwert einer bestimmten Spalte in jeder durch eine andere Spalte definierten Gruppe enthalten. In der bereitgestellten Tabelle „TopTen“ besteht die Aufgabe beispielsweise darin, eine Zeile für jeden eindeutigen „Home“-Wert und den entsprechenden Maximalwert der Spalte „datetime“ zu extrahieren.

Die ursprünglich versuchte Abfrage lautete wie folgt, war jedoch fehlerhaft:

<code class="language-sql">SELECT
  s1.id,
  s1.home,
  s1.datetime,
  s1.player,
  s1.resource
FROM TopTen s1
JOIN (SELECT
  id,
  MAX(`datetime`) AS dt
FROM TopTen
GROUP BY id) AS s2
  ON s1.id = s2.id
ORDER BY `datetime`</code>
Nach dem Login kopieren

Die Abfrage identifiziert den maximalen „datetime“-Wert für jedes „home“ nicht korrekt. Um das Problem richtig zu lösen, müssen sowohl „home“ als auch „datetime“ in der Unterabfrage gruppiert werden:

<code class="language-sql">SELECT tt.*
FROM topten tt
INNER JOIN
    (SELECT home, MAX(datetime) AS MaxDateTime
    FROM topten
    GROUP BY home) groupedtt 
ON tt.home = groupedtt.home 
AND tt.datetime = groupedtt.MaxDateTime</code>
Nach dem Login kopieren

Diese letzte Abfrage identifiziert erfolgreich jede Zeile mit einem anderen „Home“-Wert, der den Maximalwert ihrer „datetime“-Spalte enthält, was zum erwarteten Ergebnis führt:

id home datetime player resource
1 10 04/03/2009 john 399
2 11 04/03/2009 juliet 244
5 12 04/03/2009 borat 555
8 13 01/01/2009 borat 700

Das obige ist der detaillierte Inhalt vonWie finde ich Zeilen mit maximalen Spaltenwerten, die durch eine andere Spalte in MySQL unterteilt sind?. 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