衆所周知,distinct是不可以對單列進行去重。但是多種字段去重又應該怎樣實現呢?
如下表所示:(表命名爲table)
id | value |
---|---|
1 | A |
2 | B |
3 | B |
4 | C |
4 | D |
5 | E |
1.對id進行去重
select distinct id from table ;
結果:
| id |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
結論:distinct + 單列字段 去重
2.在1的基礎上加value字段,對value進行去重
select disinct value,id from table;
結果:
| id | | value |
| 1 | | A |
| 2 | | B |
| 3 | | B |
| 4 | | C |
| 4 | | D |
| 5 | | E |
結論:distinct +多字段,只能在多字段相同時才能進行去重
那麼,如果將distinct value換個位置是不是就可以單獨對它進行去重了呢?
select id,distinct value from table;
結果:
報錯
結論:distinct 必須放在前面
那麼,如果就是想在查詢多字段的時候對value排重要怎麼做呢?
我們可以使用group by的方法
select value ,min(id) from table group by value
結果:
| id | | value |
| 1 | | A |
| 3 | | B |
| 4 | | C |
| 4 | | D |
| 5 | | E |
結論:min(id),會將id小的以及對應的value值刪除。當DISTINCT無法滿足只對單字段去重,並希望結果中顯示對應的多字段內容的時候,可以用group by函數實現。