新聞中心
DISTINCT 實(shí)際上和 GROUP BY 操作的實(shí)現(xiàn)非常相似,只不過是在 GROUP BY 之后的每組中只取出一條記錄而已。所以,DISTINCT 的實(shí)現(xiàn)和 GROUP BY 的實(shí)現(xiàn)也基本差不多,沒有太大的區(qū)別。同樣可以通過松散索引掃描或者是緊湊索引掃描來實(shí)現(xiàn),當(dāng)然,在無法僅僅使用索引即能完成 DISTINCT 的時(shí)候,MySQL 只能通過臨時(shí)表來完成。但是,和 GROUP BY 有一點(diǎn)差別的是,DISTINCT 并不需要進(jìn)行排序。

在使用 MySQL SELECT 語句查詢數(shù)據(jù)的時(shí)候返回的是所有匹配的行。
查詢 tb_students_info 表中所有 age 的執(zhí)行結(jié)果如下所示。
mysql> SELECT age FROM tb_students_info;
+------+
| age |
+------+
| 25 |
| 23 |
| 23 |
| 22 |
| 24 |
| 21 |
| 22 |
| 23 |
| 22 |
| 23 |
+------+
10 rows in set (0.00 sec)
可以看到查詢結(jié)果返回了 10 條記錄,其中有一些重復(fù)的 age 值,有時(shí)出于對(duì)數(shù)據(jù)分析的要求,需要消除重復(fù)的記錄值。這時(shí)候就需要用到 DISTINCT 關(guān)鍵字指示 MySQL 消除重復(fù)的記錄值,語法格式為:
SELECT DISTINCT FROM ;
查詢 tb_students_info 表中 age 字段的值,返回 age 字段的值且不得重復(fù),輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。
mysql> SELECT DISTINCT age FROM tb_students_info;
+------+
| age |
+------+
| 25 |
| 23 |
| 22 |
| 24 |
| 21 |
+------+
5 rows in set (0.11 sec)
由運(yùn)行結(jié)果可以看到,這次查詢結(jié)果只返回了 5 條記錄的 age 值,且沒有重復(fù)的值。
網(wǎng)站標(biāo)題:MySQL中對(duì)數(shù)據(jù)進(jìn)行去重
文章路徑:http://m.5511xx.com/article/cdjhohe.html


咨詢
建站咨詢
