MySQL中如何選擇每組中值最高的行?

Linda Hamilton
發布: 2024-11-24 08:02:11
原創
593 人瀏覽過

How to Select the Row with the Highest Value in Each Group in MySQL?

MySQL:控制在Group BY 查詢中傳回哪一行

在MySQL 中,從每個群組中擷取具有最高值的行是一項共同的任務。但是,將標準 GROUP BY 子句與 ORDER BY 一起使用有時會導致意外結果。

為了實現此目的,我們可以採用替代方法來覆寫預設分組行為:

子查詢方法:

該方法涉及建立一個子查詢來取得每個唯一的最大version_id id:

SELECT *
FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1
INNER JOIN table t2 ON (t2.id = t1.id AND t1.version_id = t2.version_id)
登入後複製

此查詢將原始表與子查詢連接起來,該子查詢為每個 id 選擇最大 version_id。連線確保僅傳回具有最高 version_id 的行。

使用ORDER BY 技巧的子查詢:

子查詢方法的一種變體涉及在子查詢以確保特定的排序:

SELECT *
FROM (SELECT * FROM table ORDER BY version_id DESC) t1
GROUP BY t1.id
登入後複製

此查詢有效地按降序對行進行排序在執行分組之前,確保每個組中保留version_id 最高的行。

命名Windows 函數:

視窗函數允許計算在視窗定義的一組行中執行,可用於此任務:

SELECT *
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY version_id DESC) AS rn
  FROM table
) t
WHERE rn = 1
登入後複製

此查詢計算行ROW_NUMBER 定義的分割區內每個唯一ID 的編號。 WHERE 子句過濾掉行號不為 1 的行,確保只傳回每個 id 具有最高 version_id 的行。

以上是MySQL中如何選擇每組中值最高的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板