如何使用MySQL的MAX()和GROUP BY正確檢索非聚合列?
Dec 30, 2024 pm 09:27 PMMySQL 中使用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

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在 Linux 中運行 MySQl(有/沒有帶有 phpmyadmin 的 podman 容器)

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什麼?
