實現數據去重有兩種方式 :distinct 和 group by
1.distinct消除重復行
distinct支持單列、多列的去重方式。
單列去重的方式簡明易懂,即相同值只保留1個。
多列的去重則是根據指定的去重的列信息來進行,即只有所有指定的列信息都相同,才會被認為是重復的信息。
(1)作用於單列
select distinct name from A //對A表的name去重然后顯示
(2)作用於多列
select distinct id,name from A //對A表的id和name去重然后顯示
注意,distinct作用於多列的時候只在開頭加上即可,並不用每個字段都加上。
distinct必須在開頭,在中間是不可以的,會報錯。
select id,distinct name from A //錯誤
(3)配合count使用
select count(distinct name) from A //對A表的不同的name進行計數
2.group by 分組語句
select name from A group by name //跟上述等價,對name分組,相當於去重。
在使用group by的時候,前邊一般會有聚合語句,例如sum,一些沒有聚合的字段必須要加到group by 后邊。
select a,sum(b) from A group by a //后邊必須要有a,否則報錯
3.區別
其實二者沒有什么可比性,但是對於不包含聚集函數的GROUP BY操作來說,和DISTINCT操作是等價的。不過雖然二者的結果是一樣的,但是二者的執行計划並不相同。
distinct只是將重復的行從結果中出去;
group by是按指定的列分組,一般這時在select中會用到聚合函數。
distinct是把不同的記錄顯示出來。
group by是在查詢時先把紀錄按照類別分出來再查詢。
group by 必須在查詢結果中包含一個聚集函數,而distinct不用。