首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 取每組最大值記錄的子查詢寫法

     編輯:MySQL 資料庫相關知識

問題

表 tab1:

id  name  num
A   a     9
A   b     11
B   f     7
B   g     8

期望結果:每個 id 組內 num 最大的那一行:

A  b  11
B  g  8

解決方案

SELECT *
FROM tab1
WHERE num IN (
    SELECT MAX(num)
    FROM tab1
    GROUP BY id
);

為什麼要用子查詢?

  • 需返回 tab1 所有欄位(含 name),不能只 SELECT id, MAX(num) GROUP BY id。
  • 若表含 TEXT/IMAGE 等大字段,這些欄位不允許出現在 GROUP BY 子句中,子查詢繞過此限制。

替代寫法(MySQL 8.0+ 窗口函數)

SELECT id, name, num
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY num DESC) AS rn
    FROM tab1
) t
WHERE rn = 1;

窗口函數效能更優、語義更清晰,推薦新版本使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved