程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 淺談sql數據庫去重

淺談sql數據庫去重

編輯:MySQL綜合教程

淺談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就好了。孤狼揭橥的博客很少,日常平凡也比擬懶,願望對年夜家有效。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved