SQL-Tipp: Maximalwert nach Gruppe extrahieren
Bei Datenbankabfragen ist es häufig erforderlich, den Maximalwert für jede unterschiedliche Gruppierung in der Tabelle zu extrahieren. In diesem Artikel wird das Problem gelöst, wie der Datensatz mit dem höchsten „Gesamt“-Wert für jeden eindeutigen „Namen“ in einer Tabelle ausgewählt wird.
Beispieltabellen und Daten:
Angenommen, wir haben die folgende Beispieltabelle:
Name | Top | Total |
---|---|---|
cat | 1 | 10 |
dog | 2 | 7 |
cat | 3 | 20 |
horse | 4 | 4 |
cat | 5 | 10 |
dog | 6 | 9 |
Abfrageziel:
Unser Ziel ist es, die folgenden Ergebnisse zu extrahieren:
Name | Top | Total |
---|---|---|
cat | 3 | 20 |
horse | 4 | 4 |
dog | 6 | 9 |
Lösung:
Dies kann mit der folgenden SQL-Abfrage erreicht werden:
<code class="language-sql">SELECT Name, Top, Total FROM sometable WHERE Total = (SELECT MAX(Total) FROM sometable i WHERE i.Name = sometable.Name);</code>
Erklärung:
Diese Abfrage verwendet eine Unterabfrage in der WHERE-Klausel. Die Unterabfrage ermittelt den Maximalwert von „Total“ für jede Gruppe basierend auf „Name“. Die äußere Abfrage filtert dann die Tabelle und wählt nur die Datensätze aus, deren „Total“ diesem Maximalwert entspricht.
Alternative:
Alternative zur Verwendung von Inner Joins:
<code class="language-sql">SELECT Name, Top, Total FROM sometable INNER JOIN ( SELECT MAX(Total) AS Total, Name FROM sometable GROUP BY Name ) AS max ON max.Name = sometable.Name AND max.Total = sometable.Total;</code>
Fazit:
Beide Methoden sind effektiv beim Extrahieren der erforderlichen Datensätze aus der Tabelle, indem sie den Maximalwert von „Total“ für jeden einzelnen „Namen“ ermitteln. Diese Abfragen können an verschiedene Datenbankverwaltungssysteme angepasst werden und bieten eine allgemeine Methode zum Extrahieren von Maximalwerten aus gruppierten Daten.
Das obige ist der detaillierte Inhalt vonWie rufe ich den maximalen „Gesamtwert' für jeden eindeutigen „Namen' in SQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!