萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 去除重複值:DISTINCT 與 GROUP BY 實戰技巧

場景

資料表 tbl 包含欄位 id、name,其中 name 有重複值。需求:查詢不重複的 name 列表、統計不重複筆數。

方法一:DISTINCT 關鍵字

SELECT DISTINCT name FROM tbl;

結果:a, b, c(去除重複)。

方法二:GROUP BY 分組

SELECT name FROM tbl GROUP BY name;

效果等同 DISTINCT,但在某些複雜查詢中可搭配聚合函數使用。

統計不重複筆數

寫法 1:COUNT(DISTINCT ...)

SELECT COUNT(DISTINCT name) FROM tbl;

寫法 2:子查詢 + COUNT(*)

SELECT COUNT(*) AS total FROM (SELECT name FROM tbl GROUP BY name) AS t;

適用於需先按其他欄位分組再計數的場景。

進階:多欄位去重

SELECT DISTINCT col1, col2 FROM tbl;
-- 或
SELECT col1, col2 FROM tbl GROUP BY col1, col2;

效能提示

  • DISTINCT 與 GROUP BY 皆會觸發排序/哈希去重,大表建議在去重欄位上建立索引。
  • 僅需計數時,COUNT(DISTINCT ...) 通常比子查詢更高效(優化器可直接使用索引)。
  • MySQL 8.0+ 支援 COUNT(DISTINCT col1, col2) 多欄位去重計數。

總結

去除重複值首選 DISTINCT,統計筆數用 COUNT(DISTINCT ...),複雜分組轉 GROUP BY。配合索引與 EXPLAIN 驗證執行計劃,確保大資料量下效能可控。

copyright © 萬盛學電腦網 all rights reserved