SQL中去除重復(fù)數(shù)據(jù)的幾種方法匯總(窗口函數(shù)對數(shù)據(jù)去重)
使用SQL對數(shù)據(jù)進(jìn)行提取和分析時,我們經(jīng)常會遇到數(shù)據(jù)重復(fù)的場景,需要我們對數(shù)據(jù)進(jìn)行去重后分析。
以某電商公司的銷售報表為例,常見的去重方法我們用到distinct 或者group by 語句, 今天介紹一種新的方法,利用窗口函數(shù)對數(shù)據(jù)去重。

【字段解釋】
訪客id:進(jìn)入店鋪瀏覽寶貝的客戶
瀏覽時間:訪客進(jìn)入店鋪瀏覽頁面的日期
瀏覽時常:訪客進(jìn)入店鋪瀏覽頁面的時長
現(xiàn)在需要知道店鋪里每個訪客和對應(yīng)的瀏覽日期(每個訪客同一天瀏覽多次算做一次記錄)
【解題思路】
方法1:distinct
SQL書寫如下:
select distinct 訪客id ,瀏覽時間
from 淘寶日銷售數(shù)據(jù)表;查詢結(jié)果:

這里用distinct語句多字段進(jìn)行去重的時候,需要特別注意2點(diǎn):
1)distinct語法規(guī)定對單字段、多字段去重,必須放在第一個查詢字段前。
2)如果對表中多列字段進(jìn)行去重,去重的過程就是將多字段作為整體去重,比如上面的例子,我們將訪客id和瀏覽時間為整體去去重,而不是對訪客id單獨(dú)去重后再對姓名單獨(dú)去重,所以會出現(xiàn)相同的訪客id對應(yīng)不同的瀏覽時間。
方法2:group by
SQL書寫如下:
select 訪客id ,瀏覽時間
from 淘寶日銷售數(shù)據(jù)表
group by 訪客id ,瀏覽時間;查詢結(jié)果:

group by對訪客id 和瀏覽時間進(jìn)行分組,分組匯總后改變了表的行數(shù),一行只有一個類別,這里使用group by后會將訪客id 和瀏覽時間作為一個類別保留,重復(fù)的就會不顯示。
方法3:窗口函數(shù)
使用窗口函數(shù)進(jìn)行去重時,比distinct和group by稍微復(fù)雜些,窗口函數(shù)不會減少原表中的行數(shù),而是對字段進(jìn)行分組后排序。詳細(xì)的窗口函數(shù)講解
窗口函數(shù)的基本語法如下:
<窗口函數(shù)> over (partition by <用于分組的列名>
order by <用于排序的列名>)根據(jù)題目要求得出每個訪客和對應(yīng)的瀏覽日期,我們對訪客id ,瀏覽時間進(jìn)行分組,對瀏覽時長(秒)進(jìn)行排序。
SQL書寫如下:
select 訪客id ,瀏覽時間 ,row_number()over(partition by 訪客id ,瀏覽時間
order by 瀏覽時長(秒)) as 排名
from 淘寶日銷售數(shù)據(jù)表;查詢結(jié)果:

窗口函數(shù)查詢按照每個客戶和瀏覽日期分組,如果同一天有幾次瀏覽,會根據(jù)點(diǎn)贊數(shù)排序,篩選排名為1,即可得出每個訪客和對應(yīng)的瀏覽日期。
SQL書寫如下:
select 訪客id ,瀏覽時間 ,row_number()over(partition by 訪客id ,瀏覽時間
order by 瀏覽時長(秒)) as 排名
from 淘寶日銷售數(shù)據(jù)表;查詢結(jié)果:

去除重復(fù)項(xiàng)的三種操作,你get了嗎?歡迎評論區(qū)補(bǔ)充你的去重辦法~
到此這篇關(guān)于SQL中去除重復(fù)數(shù)據(jù)的幾種方法,我一次性都告你?的文章就介紹到這了,更多相關(guān)sql去除重復(fù)數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQLServer2019 數(shù)據(jù)庫的基本使用之圖形化界面操作的實(shí)現(xiàn)
這篇文章主要介紹了SQLServer2019 數(shù)據(jù)庫的基本使用之圖形化界面操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
SQL Server 數(shù)據(jù)文件收縮和查看收縮進(jìn)度的步驟
這篇文章主要介紹了SQL Server 數(shù)據(jù)文件收縮和查看收縮進(jìn)度,SQL Server在刪除數(shù)據(jù)后,會重新利用這部分空間,所以如果不是空間緊張的情況下,可以不回收,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
通過Windows批處理命令執(zhí)行SQL Server數(shù)據(jù)庫備份
這篇文章主要介紹了通過Windows批處理命令執(zhí)行SQL Server數(shù)據(jù)庫備份的相關(guān)資料,需要的朋友可以參考下2016-03-03
SQLServer中的切割字符串SplitString函數(shù)
有時我們要用到批量操作時都會對字符串進(jìn)行拆分,可是SQL Server中卻沒有自帶Split函數(shù),所以要自己來實(shí)現(xiàn)了。沒什么好說的,需要的朋友直接拿去用吧2011-11-11
SQL Server將數(shù)據(jù)導(dǎo)入導(dǎo)出到Excel表格的全過程
這篇文章主要介紹了SQL Server將數(shù)據(jù)導(dǎo)入導(dǎo)出到Excel表格的全過程,文中通過圖文結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-06-06
使用SQL語句創(chuàng)建數(shù)據(jù)庫與創(chuàng)建表操作指南
這篇文章主要給大家介紹了關(guān)于使用SQL語句創(chuàng)建數(shù)據(jù)庫與創(chuàng)建表操作的相關(guān)資料,創(chuàng)建數(shù)據(jù)庫是數(shù)據(jù)庫管理的第一步,而SQL語句是創(chuàng)建數(shù)據(jù)庫的基本工具,需要的朋友可以參考下2023-08-08
MSSQL 多字段根據(jù)范圍求最大值實(shí)現(xiàn)方法
MSSQL 多字段根據(jù)范圍求最大值實(shí)現(xiàn)語句,大家可以參考下2009-09-09
Sql Server中存儲過程中輸入和輸出參數(shù)(簡單實(shí)例 一看就懂)
Sql Server中存儲過程中輸入和輸出參數(shù)(簡單實(shí)例,一看就懂),方便需要的朋友2012-10-10

