久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中怎么清除結(jié)果集的重復(fù)數(shù)據(jù)

146次閱讀
沒有評論

共計 1825 個字符,預(yù)計需要花費(fèi) 5 分鐘才能閱讀完成。

這期內(nèi)容當(dāng)中丸趣 TV 小編將會給大家?guī)碛嘘P(guān) MySQL 中怎么清除結(jié)果集的重復(fù)數(shù)據(jù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、關(guān)鍵字 Distinct 和 Distinctrow
關(guān)鍵字 distinct 一般直接跟在查詢語句中 SELECT 的后面,替換可選的關(guān)鍵字 all,而關(guān)鍵字 all 是默認(rèn)的。Distinctrow 是 distinct 的別名,它產(chǎn)生的效果與 distinct 是完成一樣的:

雙擊代碼全選
4SELECT [ALL | DISTINCT | DISTINCTROW]select_expr[FROM table_references[WHERE where_condition]

為了說明這些關(guān)鍵字的用法,我們以下表中的數(shù)據(jù)為例來進(jìn)行說明。其中,該表含有一些水果名稱及其對應(yīng)的顏色:

以下查詢將從上表中檢索所有水果的名稱,并按字母順序?qū)⑵淞谐觯?/p>

雙擊代碼全選
2SELECT nameFROM fruits;

由于沒有附帶顏色信息,所以每種水果品種的是重復(fù)的:

現(xiàn)在,讓我們使用關(guān)鍵字 distinct 再查詢一次,看看結(jié)果如何:

雙擊代碼全選
2SELECT DISTINCT nameFROM fruits;

不出所料,由于附帶了水果的顏色信息,所以每種水果的名稱只出現(xiàn)了一次:

二、重復(fù)數(shù)據(jù)的取舍
有時候,是不能使用關(guān)鍵字 distinct 的,因為刪除復(fù)制的數(shù)據(jù)會導(dǎo)致錯誤的結(jié)果。請考慮下列情形:
客戶想要生成一張職工表,以便進(jìn)行某些資料統(tǒng)計。為此,我們可以使用下列命令:

雙擊代碼全選
5SELECT name,
 gender, 
 salaryFROM employeesORDER BY name;

奇怪的是,結(jié)果中出現(xiàn)了重復(fù)的“Kristen Ruegg”:

客戶說,他們不希望出現(xiàn)重復(fù),所以開發(fā)人員在 SELECT 語句中加入了關(guān)鍵字 distinct。好了,這會能夠滿足客戶的要求了,但是問題也隨之而來了,因為公司確實有兩個重名的員工。所以,添加關(guān)鍵字 distinct 刪除了一個有效的記錄,因此得 到的結(jié)果實際上錯誤的。我們可以通過 emp_id_number 來確認(rèn)一下,的確有兩名員工都叫 Kristen Rueggs:

雙擊代碼全選
6SELECT name,
 gender, 
 salary,
 emp_id_numberFROM employeesORDER BY name;

下面是出現(xiàn)問題的數(shù)據(jù),它們的 emp_id_numbers 都是唯一的:

上面的情形告訴我們:使用關(guān)鍵字 distinct 的時候,要確保不會無意中刪除有效數(shù)據(jù)!
三、關(guān)鍵字 Distinct 與 Group By 的區(qū)別
使用 distinct 與不使用聚合功能情況下對全選所有欄數(shù)據(jù)進(jìn)行分組的邏輯效果是一樣的。對于這樣的查詢,group by 命令只是生產(chǎn)了一列分組后的值。在顯示某欄并對齊分組的時候,該查詢會給出該欄中不同的值。然而,在顯示多欄并對它們進(jìn)行分組的時候,該查詢會給出每 欄中的值的不同的組和。例如,以下查詢生成的結(jié)果與第一個 SELECT distinct 命令的結(jié)果完全一樣:

雙擊代碼全選
3SELECT nameFROM fruits GROUP BY name;

同樣地,以下語句生成的結(jié)果,與我們的 SELECT distinct 語句在員工表上生成的結(jié)果也完全一樣:

雙擊代碼全選
5SELECT name,
 gender, 
 salary FROM employeesGROUP BY name;

關(guān)鍵字 distinct 和 group by 的區(qū)別在于,group by 子句會對數(shù)據(jù)記錄進(jìn)行排序。因此:

雙擊代碼全選
11SELECT name,
 gender, 
 salary FROM employeesGROUP BY name; 或者:SELECT DISTINCT name,
 gender, 
 salary FROM employeesORDER BY name;

四、統(tǒng)計重復(fù)的數(shù)據(jù)
關(guān)鍵字 Distinct 可以用于 COUNT() 函數(shù),來統(tǒng)計一欄中包含多少不同的值。COUNT ( distinct expression)將統(tǒng)計給定表達(dá)式在不同的非零值的數(shù)量。該表達(dá)式可以是要統(tǒng)計其中不同的非零值的數(shù)量的欄名。
下面是表 employee 中的所有數(shù)據(jù):

對 name 字段應(yīng)用 Count distinct 函數(shù)會得到六個不同的名稱:

上述就是丸趣 TV 小編為大家分享的 MySQL 中怎么清除結(jié)果集的重復(fù)數(shù)據(jù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計1825字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 平果县| 大田县| 墨脱县| 镇原县| 原阳县| 甘肃省| 西吉县| 房山区| 慈利县| 阳新县| 山阴县| SHOW| 盐亭县| 遂宁市| 屏山县| 义马市| 尉犁县| 双桥区| 左权县| 鹤壁市| 富蕴县| 新密市| 会泽县| 郎溪县| 巴塘县| 石林| 永新县| 团风县| 临颍县| 石城县| 宜良县| 瑞丽市| 师宗县| 新化县| 鲁山县| 临海市| 寿阳县| 华坪县| 岳阳县| 海城市| 达尔|