Heim >Datenbank >MySQL-Tutorial >Wie kann man Datensätze mit den höchsten oder niedrigsten Werten pro Gruppe in SQL effizient abrufen?
Datensätze mit den höchsten/kleinsten Werten pro Gruppe abrufen
Problem:
Datensätze abrufen mit den höchsten oder kleinsten Werten für ein bestimmtes Feld innerhalb jeder Gruppe.
Former Vorgeschlagene Lösung:
Verwendung von Rängen (@rank := @rank 1) in komplexen Abfragen mit Unterabfragen.
Alternative Lösung:
Ein effizienterer Ansatz besteht darin, einen Left Outer Join ohne Ranking-Variablen zu verwenden:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
Diese Abfrage erreicht das Gewünschte Ergebnis durch Nutzung einer Indizierungsstrategie für (GroupId, OrderField), um den Zugriff auf t2 zu optimieren.
Überlegungen zur Optimierung:
AND (t1.OrderField < t2.OrderField OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
Vorteile von Left Outer Join Ansatz:
Das obige ist der detaillierte Inhalt vonWie kann man Datensätze mit den höchsten oder niedrigsten Werten pro Gruppe in SQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!