淺談sql數據庫去重。本站提示廣大學習愛好者:(淺談sql數據庫去重)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談sql數據庫去重正文
關於sql去重,我簡略談一下本身的簡介,假如列位有建議或有不明確的迎接多多指出。
關於sql去重最多見的有兩種方法:DISTINCT和ROW_NUMBER(),固然了ROW_NUMBER()除去重還有許多其他比擬主要的功效,一會我給年夜家簡略說說我本身在現實頂用到的。
假設有張UserInfo表,以下圖:
如今我們要去失落完整反復的數據:SELECT DISTINCT * FROM dbo.UserInfo成果以下圖:
然則如今有個新的需求,要把名字為‘張三'的去重,也就是雷同名字的只需一條數據,如果還用DISTINCT的話就很費事了。想必聰慧的你曾經想到此時是ROW_NUMBER()退場的時刻了吧。我們只需履行如許一句話就萬事年夜吉了SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) AS RowId,* FROM dbo.UserInfo) x WHERE x.RowId=1;固然看起來有點長,然則很輕易懂得。如今履行的成果以下圖:
如今名字反復的數據只取了一條,並且是依據sql語句中的ORDER BY ID取的第一條,個中PARTITION BY前面跟的就是去重的字段,或許你想問為何要加WHERE x.RowId=1呢,如今我們不加這個前提看看成果若何:SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) AS RowId,* FROM dbo.UserInfo) x,以下圖:
如今我們曾經看到,假如不加前提會把一切數據都查出來,所以RowId=1的數據就是去重後的數據;
ROW_NUMBER()除可以去重還可以獲得表的行號,如今我們只需一下語句:SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RowNum,* FROM dbo.UserInfo,成果以下圖:
獲得了一切的數據,並且還獲得了每條數據的行號,個中數據的次序可以依據ORDER BY ID調理,也就是說不去重的話就不消加PARTITION BY Name了,此功效在分頁頂用的也比擬多,假設每頁15條數據,分頁時直接加前提RowNum Between 1 AND 15就好了。孤狼揭橥的博客很少,日常平凡也比擬懶,願望對年夜家有效。