首頁 >資料庫 >mysql教程 >MySQL中如何選擇每組中值最高的行?

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

Linda Hamilton
Linda Hamilton原創
2024-11-24 08:02:11674瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn