gpt4 book ai didi

mysql - 获取每组分组 SQL 结果的最大值记录

转载 作者:IT老高 更新时间:2023-10-28 12:48:42 25 4
gpt4 key购买 nike

如何获取包含每个分组集最大值的行?

我在这个问题上看到了一些过于复杂的变体,但都没有一个好的答案。我试图把最简单的例子放在一起:

给定下面这样的表格,其中包含人员、组和年龄列,您将如何获得每个组中最年长的人? (组内的平局应该给出第一个字母结果)

Person | Group | Age
---
Bob | 1 | 32
Jill | 1 | 34
Shawn| 1 | 42
Jake | 2 | 29
Paul | 2 | 36
Laura| 2 | 39

想要的结果集:

Shawn | 1     | 42    
Laura | 2 | 39

最佳答案

正确的解决方法是:

SELECT o.*
FROM `Persons` o # 'o' from 'oldest person in group'
LEFT JOIN `Persons` b # 'b' from 'bigger age'
ON o.Group = b.Group AND o.Age < b.Age
WHERE b.Age is NULL # bigger age not found

工作原理:

它匹配 o 中的每一行包含 b 中的所有行在 Group 列中具有相同的值列 Age 中的值更大.来自 o 的任何行Age 列中没有其组的最大值将匹配 b 中的一行或多行.

LEFT JOIN使它匹配组中最年长的人(包括他们组中单独的人)与一整行 NULL来自 b ('没有最大的年龄')。
使用 INNER JOIN使这些行不匹配并被忽略。

WHERE子句仅保留具有 NULL 的行从 b 中提取的字段中的 s .他们是每个组中年龄最大的人。

进一步阅读

SQL Antipatterns: Avoiding the Pitfalls of Database Programming 一书中解释了此解决方案和许多其他解决方案。

关于mysql - 获取每组分组 SQL 结果的最大值记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com