1. 程式人生 > >SQL 資料排重,去掉重複資料

SQL 資料排重,去掉重複資料

 1.最大的錯誤:
    在對資料排重的時候,首先想到的就是Distinct,雖然這很管用,但多數場合下不適用,因為通常排重後還要做進一步處理,比如對編號排重後要按日期統計等。

    無法排重的Group by ... having ...
    雖然可以用Group by userid having count(*) =1 或者>1 ,但只能找出重複或者不重複的記錄,好像達不到distinct 的效果(我是沒做到,啊笨)。

    這個可以:
    用select * from table t where not exists (select 1 from table where userid=t.userid and submit_time > submit_time) (submit_time為記錄入庫時間,或者可以用其他的只要是資料庫中不重複的欄位就成),同時還達到了一個效果,第一次入庫的userid才被計算在內,這在許多情況下還是比較有用的(比如處理誤操作什麼的)。

    值得注意:
     另外在用上面的方法排重的時候,如果外面的select * .... where ...  後還有其他條件,則這些條件也要寫入 select 1 from .... where .... 中,即內、外條件要相同(我就是沒注意到這點,發現結果比Distinct 上下差幾條,鬱悶了好久:( )

2.還可以這樣: select from (select ID,Name,Email ROW_NUMBER() over (partition by Email order by ID descas rn  from 學員表 ) K where rn<2;
3.根據一個欄位排重 select * from 表 
where 欄位 in (select 欄位 from 表 group by 欄位 having count(欄位) > 1) 

4.sql1="select 標題,參考價格,內容,生產廠商,配件型別,適用機型,配件效能 from Contentpj GROUP BY 標題,參考價格,內容,生產廠商,配件型別,適用機型,配件效能"