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>
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>
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!