可以看到表中的value字段有重復(fù),如果想篩選去重,使用select distinct語句如下:
成都創(chuàng)新互聯(lián)專注于通河企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。通河網(wǎng)站建設(shè)公司,為通河等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
得到結(jié)果會是
| value
| a
| b
| c
| e
| f
篩選去重是實現(xiàn)了,可是只有選中的value列顯示了出來,如果我想知道對應(yīng)的id呢?
嘗試一下把id字段加入sql語句,如下:
得到結(jié)果:
| value | id
| a | 1
| b | 2
| c | 3
| c | 4
| e | 5
| f | 5
更換一下sql語句中id和value的順序,如下:
得到結(jié)果:
| id |value
| 1 | a
| 2 | b
| 3 | c
| 4 | c
| 5 | e
| 5 | f
好像看明白它的作用結(jié)果了,只有id和value兩個字段同時重復(fù)時,select distinct語句才會把它列入“去重”清單
所以能看到id為3和4的value雖然都是4,但由于select語句中寫了id字段,它也默認(rèn)會對id字段起效。
而且如果sql語句中把DISTINCT放到只想起效的字段前,那也是不行的....比如sql語句改為:
會提示sql報錯。
那到底怎么樣能得到我想要的只對value字段內(nèi)容去重,顯示結(jié)果又能保留其他字段內(nèi)容呢....
找到的解決方法是使用group by函數(shù),sql語句如下:
得到結(jié)果:
| min(id) |value
| 1 | a
| 2 | b
| 3 | c
| 5 | e
| 5 | f
完成目標(biāo)了?!
如果把sql語句中的min()換成max()呢?
得到結(jié)果:
| min(id) |value
| 1 | a
| 2 | b
| 4 | c
| 5 | e
| 5 | f
也完成目標(biāo)了?!
同時比對兩次sql運行結(jié)果可以發(fā)現(xiàn),
第一次使用min(id)時,由于重復(fù)結(jié)果存在兩條而id最小的為為3,符合min(id)的篩選條件,所以結(jié)果中把id等于4的重復(fù)記錄刪除了。
第二次使用max(id)時結(jié)果中,也就把id等于3的重復(fù)記錄刪除了
可以推論到假如還存在一條id=5,value=c的記錄,使用max(id)時得到的結(jié)果里就會是5 c這條了。
再來嘗試一下,如果min()和max()用在value字段里呢:
得到結(jié)果:
| id |min(value)
| 1 | a
| 2 | b
| 3 | c
| 4 | c
| 5 | e
得到結(jié)果:
| id |min(value)
| 1 | a
| 2 | b
| 3 | c
| 4 | c
| 5 | f
再仔細想想,這種需求也只出現(xiàn)在不是那么care顯示結(jié)果中,非去重目標(biāo)字段的內(nèi)容時才能使用,如果需要指定這些字段的值,可能篩選條件就不是min()和max()那么簡單了....
以上。
不建議直接刪除,養(yǎng)成良好的習(xí)慣(刪除更麻煩),以下是將去重后的數(shù)據(jù)轉(zhuǎn)移到另一張表代碼:
Insert into 表名(列名)select distinct 列名 from 表名
你可以按照去重的思路,刪除重復(fù)數(shù)據(jù)
b. 方法:
☆根據(jù)dname分組,查找出deptno最小的。然后再查找deptno不包含剛才查出來的。這樣就查詢出了所有的重復(fù)數(shù)據(jù)(除了deptno最小的那行)
方法2
刪除重復(fù)的行
單個字段的如果會了,多個字段也非常簡單。就是將group by 的字段增加為你想要的即可。
此處只寫一個,其他方法請仿照一個字段的寫即可。
查詢結(jié)果不含指定字段重復(fù)
2.表需要刪除重復(fù)的記錄(重復(fù)記錄保留1條),
3.查詢重復(fù)
4.1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(peopleId)來判斷
4.2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(peopleId)來判斷,只留有rowid最小的記錄
4.3、查找表中多余的重復(fù)記錄(多個字段)
4.4、刪除表中多余的重復(fù)記錄(多個字段),只留有rowid最小的記錄
4.5、查找表中多余的重復(fù)記錄(多個字段),不包含rowid最小的記錄
4.6.消除一個字段的左邊的第一位:
4.7.消除一個字段的右邊的第一位:
4.8.假刪除表中多余的重復(fù)記錄(多個字段),不包含rowid最小的記錄
查詢重復(fù)
MySQL 刪除重復(fù)數(shù)據(jù)
有些 MySQL 數(shù)據(jù)表中可能存在重復(fù)的記錄,有些情況我們允許重復(fù)數(shù)據(jù)的存在,但有時候我們也需要刪除這些重復(fù)的數(shù)據(jù)。
本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復(fù)數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù)。
刪除重復(fù)數(shù)據(jù)
如果你想刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù),你可以使用以下的SQL語句:
from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識平臺
當(dāng)然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復(fù)記錄。方法如下:
使用Group by column_name對目標(biāo)列分組,得到的結(jié)果就是去重的結(jié)果了。
如菜鳥上給出的例子,我們有如下表:
想要得出每個同學(xué)有幾條記錄:
擴展:想要得出一共有幾位同學(xué):select count(*) from employee_tbl group by name;
意即:表里一共有幾種name
網(wǎng)站標(biāo)題:mysql怎么去重 mysql字符串去重
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article46/doccohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、營銷型網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、定制開發(fā)、動態(tài)網(wǎng)站、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)