Heim > Datenbank > MySQL-Tutorial > Wie kann ich Werte basierend auf dem Maximum einer zugehörigen Spalte in SQL effizient abrufen?

Wie kann ich Werte basierend auf dem Maximum einer zugehörigen Spalte in SQL effizient abrufen?

Susan Sarandon
Freigeben: 2025-01-17 19:07:10
Original
283 Leute haben es durchsucht

How Can I Efficiently Retrieve Values Based on the Maximum of a Related Column in SQL?

Erhalten Sie effizient Daten basierend auf dem Maximalwert der relevanten Spalte

In Szenarien, in denen Sie einen bestimmten Spaltenwert basierend auf dem Maximalwert der zugehörigen Spalte und gruppiert nach einer dritten Spalte abrufen müssen, bietet SQL eine optimierte Lösung. Betrachten Sie die folgende Tabelle, die Daten für die Spalten KEY, NUM und VAL enthält:

KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM

Ziel ist es, aus diesen Daten folgende Ergebnisse abzurufen:

KEY VAL
A AB
B EF
C HI
D LM

Während die in der Frage bereitgestellte Abfrage dieses Ergebnis erzielt, gibt es eine elegantere Möglichkeit, row_number() zu verwenden:

<code class="language-sql">select key, val
from (
  select t.*, row_number() over (partition by key order by num desc) as seqnum
  from table_name t
) t
where seqnum = 1;</code>
Nach dem Login kopieren

Diese Abfrage partitioniert Zeilen effizient basierend auf der KEY-Spalte und weist Zeilennummern in absteigender Reihenfolge seqnum innerhalb jeder Partition zu. Durch die Auswahl von Zeilen, in denen seqnum gleich 1 ist, erhalten wir das gewünschte Ergebnis und behalten die gewünschte Gruppierung bei.

Es ist erwähnenswert, dass sich diese Methode geringfügig von der ursprünglichen Abfrage unterscheidet, da sie immer eine Zeile pro Schlüssel zurückgibt, während die ursprüngliche Abfrage möglicherweise mehrere Zeilen zurückgibt. Wenn dieses Verhalten gewünscht ist, kann rank() oder dense_rank() anstelle von row_number() verwendet werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Werte basierend auf dem Maximum einer zugehörigen Spalte in SQL effizient abrufen?. 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