SQL中按组查找最大记录
在数据库管理中,经常需要检索每个数据组中的最大记录。考虑以下场景。
问题:
您有一个包含三个字段的表:“Name”、“Top”和“Total”,数据如下:
Name | Top | Total |
---|---|---|
cat | 1 | 10 |
dog | 2 | 7 |
cat | 3 | 20 |
horse | 4 | 4 |
cat | 5 | 10 |
dog | 6 | 9 |
您的任务是查找每个唯一“Name”值中“Total”值最大的记录。期望的结果应该是:
Name | Top | Total |
---|---|---|
cat | 3 | 20 |
horse | 4 | 4 |
dog | 6 | 9 |
解决方案:
要检索每个组的最大记录,可以使用以下查询:
<code class="language-sql">select Name, Top, Total from sometable where Total = (select max(Total) from sometable i where i.Name = sometable.Name)</code>
此查询将每条记录的“Total”值与其在同一“Name”组中的最大“Total”值进行比较。然后选择“Total”值匹配的记录。
或者,您可以使用子查询来实现相同的结果:
<code class="language-sql">select Name, Top, Total from sometable inner join ( select max(Total) as Total, Name from sometable group by Name ) as max on max.Name = sometable.Name and max.Total = sometable.Total</code>
此查询首先使用子查询计算每个唯一“Name”的最大“Total”值。然后,主查询将表与子查询连接,以仅选择具有匹配最大“Total”值的记录。
以上是如何在SQL中查找每个组的最大记录?的详细内容。更多信息请关注PHP中文网其他相关文章!