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