MySQL按另一列分组查找具有最大列值的行
在数据库中,按另一列分组查找具有最大值的行是一项常见的分析任务。在MySQL中,这可以通过组合聚合和过滤来实现。
本文探讨了从表中检索行的问题,这些行包含由另一列定义的每个组中特定列的最大值。例如,在提供的“TopTen”表中,任务是为每个唯一的“home”值提取行,以及相应的“datetime”列的最大值。
最初尝试的查询如下,但存在缺陷:
<code class="language-sql">SELECT s1.id, s1.home, s1.datetime, s1.player, s1.resource FROM TopTen s1 JOIN (SELECT id, MAX(`datetime`) AS dt FROM TopTen GROUP BY id) AS s2 ON s1.id = s2.id ORDER BY `datetime`</code>
该查询未能正确识别每个“home”的最大“datetime”值。 为了正确解决问题,需要在子查询中同时对“home”和“datetime”进行分组:
<code class="language-sql">SELECT tt.* FROM topten tt INNER JOIN (SELECT home, MAX(datetime) AS MaxDateTime FROM topten GROUP BY home) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime</code>
此最终查询成功地识别了每个不同“home”值的行,这些行包含其“datetime”列的最大值,从而得到预期的结果:
id | home | datetime | player | resource |
---|---|---|---|---|
1 | 10 | 04/03/2009 | john | 399 |
2 | 11 | 04/03/2009 | juliet | 244 |
5 | 12 | 04/03/2009 | borat | 555 |
8 | 13 | 01/01/2009 | borat | 700 |
以上是如何在 MySQL 中查找具有最大列值并被另一列分区的行?的详细内容。更多信息请关注PHP中文网其他相关文章!