使用 SQL 高效识别每组中最年长的人
数据库查询通常需要查找特定组内的最大值。 此示例演示如何从具有 person
、group
和 age
列的表中查明每组中年龄最大的人。
解决方案:
此方法利用 LEFT JOIN
来比较小组中每个人的年龄。 没有匹配的行代表该组中最年长的人。
实施:
<code class="language-sql">SELECT o.* FROM Persons o LEFT JOIN Persons b ON o.Group = b.Group AND o.Age < b.Age WHERE b.Age IS NULL;</code>
说明:
Persons o
:Persons
表的别名为 o
(表示“最旧的”)。LEFT JOIN Persons b
:使用别名为 LEFT JOIN
(代表“较大年龄”)的 Persons
表执行 b
。 这会将 o
中的每一行与同一组 (o.Group = b.Group
) 中年龄较大 (o.Age < b.Age
) 的行连接起来。WHERE b.Age IS NULL
:这个关键子句过滤结果。 如果 o
中的某个人在 b
中没有匹配项(意味着 b.Age
为 NULL),则表示其组中没有人年龄更大。 因此,只选择每组中年龄最大的人。重要注意事项:
INNER JOIN
会错误地忽略只有一名成员的组中最年长的人。以上是如何使用 SQL 查找每个组中最年长的人?的详细内容。更多信息请关注PHP中文网其他相关文章!