表 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 子句中,子查詢繞過此限制。SELECT id, name, num
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY num DESC) AS rn
FROM tab1
) t
WHERE rn = 1;
窗口函數效能更優、語義更清晰,推薦新版本使用。