Maximalwertabfrage für identische IDs
In einer Tabelle mit mehreren Datensätzen mit derselben ID kann es vorkommen, dass Sie auf ein Szenario stoßen, in dem Sie dies tun müssen Rufen Sie den Maximalwert für jede ID ab. Hier ist eine Abfrage, um dies zu erreichen:
Unterabfrage-Ansatz:
select cur.id, cur.signal, cur.station, cur.ownerid from yourtable cur where not exists ( select * from yourtable high where high.id = cur.id and high.signal > cur.signal )
Diese Abfrage verwendet eine Unterabfrage mit einer „NOT EXISTS“-Klausel, um alle Zeilen mit einem höheren Wert auszuschließen Signal als die aktuelle Zeile. Dadurch wird für jede ID die Zeile mit dem maximalen Signal ausgewählt. Der potenzielle Nachteil besteht darin, dass mehrere Zeilen für IDs mit gleichen Maximalwerten aufgelistet werden können.
Outer-Join-Ansatz:
Ein alternativer Ansatz ist die Verwendung eines Outer-Joins mit a Self-Join:
select a.id, a.signal, a.station, a.ownerid from yourtable a left join yourtable b on a.id = b.id and a.signal < b.signal where b.id is null
Diese Abfrage verwendet einen Outer-Join, um die Zeilen ohne höhere Signale zu finden. Durch Anwenden einer Bedingung, die nach Nullwerten in den verbundenen Zeilen sucht, werden die Zeilen mit niedrigeren Signalen herausgefiltert. Dieser Ansatz garantiert eine einzelne Zeile für jede ID mit dem maximalen Signal.
Beispiel:
Unter Verwendung der bereitgestellten Tabelle würden die Abfragen die folgenden Ergebnisse zurückgeben:
Unterabfrage-Ansatz:
ID | Signal | Station | OwnerID |
---|---|---|---|
111 | -120 | Home | 1 |
222 | -95 | Work | 1 |
Outer Join Ansatz:
ID | Signal | Station | OwnerID |
---|---|---|---|
111 | -120 | Home | 1 |
222 | -95 | Work | 1 |
Fazit:
Beide Ansätze erreichen das gleiche Ziel, den maximalen Signalwert für jede ID abzurufen. Der Unterabfrage-Ansatz kann für kleine Datensätze effizienter sein, während der Outer-Join-Ansatz für größere Datensätze effizienter sein kann, insbesondere wenn mehrere Zeilen mit identischen Signalen vorhanden sind.
Das obige ist der detaillierte Inhalt vonWie kann der Maximalwert für identische IDs in einer Datenbanktabelle effizient abgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!