SQL技巧:按组提取最大值
在数据库查询中,经常需要针对表中每个不同的分组提取最大值。本文将解决如何在一个表中,为每个唯一的“Name”选择具有最高“Total”值的记录的问题。
示例表和数据:
假设我们有以下示例表:
Name | Top | Total |
---|---|---|
cat | 1 | 10 |
dog | 2 | 7 |
cat | 3 | 20 |
horse | 4 | 4 |
cat | 5 | 10 |
dog | 6 | 9 |
查询目标:
我们的目标是提取以下结果:
Name | Top | Total |
---|---|---|
cat | 3 | 20 |
horse | 4 | 4 |
dog | 6 | 9 |
解决方案:
可以使用以下SQL查询实现此目标:
<code class="language-sql">SELECT Name, Top, Total FROM sometable WHERE Total = (SELECT MAX(Total) FROM sometable i WHERE i.Name = sometable.Name);</code>
解释:
此查询在WHERE子句中使用了子查询。子查询根据“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”最大值来从表中提取所需的记录。这些查询可以适应各种数据库管理系统,并为从分组数据中提取最大值提供通用的方法。
以上是如何在 SQL 中检索每个唯一'名称”的最大'总计”值?的详细内容。更多信息请关注PHP中文网其他相关文章!