此範例示範如何識別 SQL 表中每個群組中最年長的人,並考慮按字母順序來解決關係。 表結構包括「人員」、「組」和「年齡」欄位:
範例表:
Person | Group | Age |
---|---|---|
Bob | 1 | 32 |
Jill | 1 | 34 |
Shawn | 1 | 42 |
Jake | 2 | 29 |
Paul | 2 | 36 |
Laura | 2 | 39 |
目標:找出每組中年紀最大的人,如果年齡相同,則按字母順序優先。
SQL 解:
<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>
說明:
此查詢使用 LEFT JOIN
將每個人 (o
) 與同一組中的所有其他人 (b
) 進行比較。 ON
子句篩選符合下列任一條件的行:
o.Age < b.Age
:o
比 b
年輕(意味著 o
不是最老的)。 o.Age = b.Age AND o.Person > b.Person
:o
與 b
年齡相同,但按字母順序排列較晚(意味著 o
不是按字母順序最古老的)。 WHERE b.Person IS NULL
子句過濾掉 o
中與 b
匹配的所有行,只留下每組中最年長的人(如果有平局,則按字母順序排在前面)。
進一步探討:
要更全面地了解進階 SQL 技術和潛在陷阱,請參閱「SQL 反模式磁碟區 1:避免資料庫程式設計的陷阱」等資源。
以上是如何在SQL中找到每個組中最年長的人?的詳細內容。更多資訊請關注PHP中文網其他相關文章!