Dieses Beispiel zeigt, wie man die älteste Person innerhalb jeder Gruppe in einer SQL-Tabelle identifiziert und dabei die alphabetische Reihenfolge berücksichtigt, um Gleichstände aufzulösen. Die Tabellenstruktur umfasst die Spalten „Person“, „Gruppe“ und „Alter“:
Beispieltabelle:
Person | Group | Age |
---|---|---|
Bob | 1 | 32 |
Jill | 1 | 34 |
Shawn | 1 | 42 |
Jake | 2 | 29 |
Paul | 2 | 36 |
Laura | 2 | 39 |
Ziel: Finden Sie die älteste Person in jeder Gruppe und priorisieren Sie sie alphabetisch, wenn das Alter identisch ist.
SQL-Lösung:
<code class="language-sql">SELECT o.* FROM Persons o LEFT JOIN Persons b ON o.Group = b.Group AND (o.Age < b.Age OR (o.Age = b.Age AND o.Person > b.Person)) WHERE b.Person IS NULL;</code>
Erklärung:
Diese Abfrage verwendet ein LEFT JOIN
, um jede Person (o
) mit allen anderen in derselben Gruppe (b
) zu vergleichen. Die ON
-Klausel filtert nach Zeilen, in denen entweder:
o.Age < b.Age
: o
ist jünger als b
(d. h. o
ist nicht der Älteste).o.Age = b.Age AND o.Person > b.Person
: o
ist genauso alt wie b
, aber alphabetisch später (was bedeutet, dass o
nicht der älteste in alphabetischer Reihenfolge ist).Die WHERE b.Person IS NULL
-Klausel filtert alle Zeilen aus o
heraus, die in b
eine Übereinstimmung hatten, sodass in jeder Gruppe nur die älteste Person (oder alphabetisch zuerst, wenn es einen Gleichstand gibt) übrig bleibt.
Weitere Erkundung:
Ein umfassenderes Verständnis fortgeschrittener SQL-Techniken und möglicher Fallstricke finden Sie in Ressourcen wie „SQL Antipatterns Band 1: Vermeidung der Fallstricke der Datenbankprogrammierung.“
Das obige ist der detaillierte Inhalt vonWie finde ich die älteste Person in jeder Gruppe in SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!