此示例演示如何识别 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中文网其他相关文章!