gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:21:23 24 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 Volume 1: Avoiding the Pitfalls of Database Programming 中解释了这个解决方案和许多其他解决方案。

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

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