Heim > Datenbank > MySQL-Tutorial > Wie kann der Maximalwert für identische IDs in einer Datenbanktabelle effizient abgerufen werden?

Wie kann der Maximalwert für identische IDs in einer Datenbanktabelle effizient abgerufen werden?

Susan Sarandon
Freigeben: 2025-01-06 12:42:40
Original
198 Leute haben es durchsucht

How to Efficiently Retrieve the Maximum Value for Identical IDs in a Database Table?

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
)
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage