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

MySQL 去重求和:DISTINCT 無法返回其他列時的 GROUP BY 替代方案

     編輯:MySQL 資料庫相關知識

問題場景

表 t(id, name):

idname
1a
2b
3c
4c
5b

需求:按 name 去重,**同時返回 id**。

DISTINCT 失效分析

SELECT DISTINCT name, id FROM t;
-- 結果:5 行全返回,因 (name,id) 組合唯一

SELECT id, DISTINCT name FROM t;  -- 語法錯誤,DISTINCT 必須在首位

解決方案:GROUP BY + 聚合函數

SELECT *, COUNT(DISTINCT name) FROM t GROUP BY name;

結果:

idnameCOUNT(DISTINCT name)
1a1
2b1
3c1
  • MySQL 允許 SELECT * 配合 GROUP BY name,**非聚合列取每組第一行**(非標準行為,依賴 ONLY_FULL_GROUP_BY=OFF)。
  • 若需確定取哪行,用 MIN(id) 或 MAX(id):
SELECT MIN(id) AS id, name FROM t GROUP BY name;

進階:GROUP_CONCAT 收集所有 id(MySQL 4.1+)

SELECT name, GROUP_CONCAT(id ORDER BY id) AS ids
FROM t
GROUP BY name;

結果:a | 1、b | 2,5、c | 3,4。

版本注意

  • GROUP_CONCAT 需 MySQL 4.1+。
  • 舊版本只能用 COUNT(DISTINCT ...) 技巧或應用層二次查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved