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中文網其他相關文章!