首頁 >資料庫 >mysql教程 >如何使用MySQL的MAX()和GROUP BY正確檢索非聚合列?

如何使用MySQL的MAX()和GROUP BY正確檢索非聚合列?

Linda Hamilton
Linda Hamilton原創
2024-12-30 21:27:09914瀏覽

How Can I Correctly Retrieve Non-Aggregated Columns with MySQL's MAX() and GROUP BY?

MySQL 中使用MAX() 進行分組與聚合

在MySQL 中,MAX() 函式可以與GROUP BY 結合使用子句來聚合資料並選擇每個群組中指定列的最大值。但是,如果目標列在群組中不唯一,則選擇相應的非聚合列可能會產生意外結果。

為了說明這個問題,讓我們檢查以下SQL 查詢:

SELECT MAX(timestamp), rid, pid
FROM theTable
GROUP BY rid;

此查詢的結果可能與期望的結果不一致,因為所選的pid 欄位可能與最大值的時間戳不匹配。

要取得正確的結果結果,我們需要修改查詢以識別每個群組中具有最大時間戳記的行,然後將這些行與原始表連接以獲得相應的 pid。

以下修改後的 SQL 查詢可以完成此操作:

SELECT test.pid, test.cost, test.timestamp, test.rid
FROM theTable AS test
INNER JOIN
    (SELECT rid, MAX(timestamp) AS ts
    FROM theTable
    GROUP BY rid) AS maxt
ON (test.rid = maxt.rid AND test.timestamp = maxt.ts);

此查詢首先使用子查詢識別每個 Rid 的最大時間戳,然後將其與原始表連接。連接條件確保所選行是每個 Rid 群組內具有最大時間戳記的行。

因此,得到所需的輸出:

pid cost timestamp rid
5 345 2011-04-14 01:06:06 1
3 4455 2011-04-14 01:05:41 2
7 5435 2011-04-14 01:14:14 3

以上是如何使用MySQL的MAX()和GROUP BY正確檢索非聚合列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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