Problemstellung
Wie kann man den Datensatz mit dem höchsten Wert effizient abrufen? oder niedrigster Wert für ein bestimmtes Feld innerhalb jeder Gruppe, die durch ein anderes Feld definiert wird?
Lösung mit Left Outer Join
Um den Datensatz mit dem höchsten Wert für das OrderField-Feld innerhalb jeder GroupId abzurufen, verwenden Sie die folgende Abfrage:
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;
Vorteile des Join-Ansatzes
Alternativen
Wenn die Daten klein sind oder Die spezifische Implementierung der von Ihnen verwendeten Datenbank-Engine ist für Verknüpfungen schlecht optimiert. Sie können Alternativen wie z. B. in Betracht ziehen als:
Ineffizienz der Methode unter Verwendung der @Rank-Variablen
Die von Ihnen beschriebene Methode unter Verwendung der @Rank-Variablen wird in der ursprünglich geschriebenen Form nicht funktionieren korrekt, da die @Rank-Variable nach der Verarbeitung der ersten Tabelle nicht auf Null zurückgesetzt wird. Um dies zu beheben, müssten Sie eine weitere abgeleitete Tabelle hinzufügen, um @Rank auf Null zurückzusetzen, bevor Sie die zweite Tabelle verarbeiten. Allerdings ist dieser Ansatz im Vergleich zum Join-Ansatz immer noch ineffizient.
Das obige ist der detaillierte Inhalt vonWie kann ich den höchsten oder niedrigsten Datensatz pro Gruppe in einer Datenbank effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!