中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

廈門(mén)規(guī)劃建設(shè)局網(wǎng)站網(wǎng)搜網(wǎng)

廈門(mén)規(guī)劃建設(shè)局網(wǎng)站,網(wǎng)搜網(wǎng),wordpress禁用react,開(kāi)發(fā)區(qū)網(wǎng)站建設(shè)方案文章目錄 一、關(guān)于mysql表中數(shù)據(jù)重復(fù)二、聚合函數(shù)min(id)not in二、窗口函數(shù)row_number()四、補(bǔ)充:常見(jiàn)的窗口函數(shù) 一、關(guān)于mysql表中數(shù)據(jù)重復(fù) 關(guān)于刪除mysql表中重復(fù)數(shù)據(jù)問(wèn)題,本文中給到兩種辦法:聚合函數(shù)、窗口函數(shù)row_number()的方法。 (注…

文章目錄

  • 一、關(guān)于mysql表中數(shù)據(jù)重復(fù)
  • 二、聚合函數(shù)min(id)+not in
  • 二、窗口函數(shù)row_number()
  • 四、補(bǔ)充:常見(jiàn)的窗口函數(shù)

一、關(guān)于mysql表中數(shù)據(jù)重復(fù)

關(guān)于刪除mysql表中重復(fù)數(shù)據(jù)問(wèn)題,本文中給到兩種辦法:聚合函數(shù)、窗口函數(shù)row_number()的方法。
(注意:MySQL從8.0開(kāi)始支持窗口函數(shù))

測(cè)試數(shù)據(jù)準(zhǔn)備:首先創(chuàng)建一個(gè)測(cè)試表test,插入一些測(cè)試數(shù)據(jù),模擬一些重復(fù)數(shù)據(jù)(最終目標(biāo):刪除重復(fù)數(shù)據(jù),但不處理null行)

先查詢(xún)下重復(fù)數(shù)據(jù),確認(rèn)待處理數(shù)據(jù)的數(shù)量,然后開(kāi)始處理:

SELECTseq_id,out_user_code,COUNT( out_user_code ) count
FROMtest
WHEREis_deleted = 0AND out_user_code IS NOT NULL
GROUP BYout_user_code
HAVINGcount( out_user_code )> 1

二、聚合函數(shù)min(id)+not in

思路:首先通過(guò)子查詢(xún)?nèi)〕?id 最小的不重復(fù)行,然后通過(guò) not in 刪除重復(fù)數(shù)據(jù)

1、首先查詢(xún)一下 id 最小的不重復(fù)行(我們留下最早插入的數(shù)據(jù),后面的重復(fù)數(shù)據(jù)都刪除):

SELECTmin(seq_id) seq_id,out_user_code,COUNT( out_user_code ) count 
FROMtest 
GROUP BYout_user_code 

2、通過(guò)查詢(xún)結(jié)果可知,重復(fù)的數(shù)據(jù)行seq_id為2、7的數(shù)據(jù)過(guò)濾掉了,接下來(lái)NOT IN 操作應(yīng)該刪除2、7重復(fù)數(shù)據(jù)行。那按照假設(shè)想法執(zhí)行NOT IN:

DELETE from test where r.seq_id not in (SELECTmin(t.seq_id) seq_idFROMtest  tGROUP BYt.out_user_code
)  r

會(huì)發(fā)現(xiàn)報(bào)錯(cuò):

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'r' at line 8, Time: 0.007000s

原因:不能先select出同一表中的某些值,再u(mài)pdate這個(gè)表(在同一語(yǔ)句中),即不能依據(jù)某字段值做判斷再來(lái)更新某字段的值。

解決方案:可將SELECT出的結(jié)果再通過(guò)中間表SELECT一遍。

3、最終處理sql:

DELETE from test where seq_id not in (SELECT r.seq_id from (SELECTmin(t.seq_id) seq_idFROMtest  tGROUP BYt.out_user_code)  r 
) and out_user_code is not null

換種寫(xiě)法(保證相關(guān)字段有索引):

DELETE from test 
where
out_user_code in (select * from (select out_user_code from test del group by out_user_code HAVING count(out_user_code) >1)a)
and seq_id not in(select * from (select min(seq_id) id from test del group by out_user_code  HAVING count(out_user_code) >1)b
)f

提醒:能邏輯刪除盡量不要物理刪除。

二、窗口函數(shù)row_number()

思路:通過(guò) PARTITION BY 對(duì)列進(jìn)行分區(qū)排序并生成序號(hào)列,然后將序號(hào)大于 1 的行刪除,row_number() over partition by。

1、分區(qū)查詢(xún):

SELECTROW_NUMBER() OVER ( PARTITION BY out_user_code ORDER BY seq_id ) num,out_user_code 
FROMtest 
WHEREout_user_code IS NOT NULL

知識(shí)補(bǔ)充:
1、ROW_NUMBER:對(duì)結(jié)果集的輸出進(jìn)行編號(hào),是運(yùn)行查詢(xún)時(shí)計(jì)算出的臨時(shí)值。 具體來(lái)說(shuō),返回結(jié)果集分區(qū)內(nèi)行的序列號(hào),每個(gè)分區(qū)的第一行從 1 開(kāi)始。
2、ROW_NUMBER() 具有不確定性。除非以下條件成立,否則不保證在每次執(zhí)行時(shí),使用 ROW_NUMBER() 的查詢(xún)所返回行的順序都完全相同。
1)分區(qū)列的值是唯一的。
2)ORDER BY 列的值是唯一的。
3)分區(qū)列和 ORDER BY 列的值的組合是唯一的。

2、直接嘗試刪除num>1的數(shù)據(jù):

DELETE a 
FROM (SELECTROW_NUMBER() OVER (PARTITION BY out_user_code ORDER BY seq_id) num FROM test where out_user_code IS NOT NULL
) a 
WHERE num>1

會(huì)發(fā)現(xiàn)報(bào)錯(cuò):
1288 - The target table a of the DELETE is not updatable, Time: 0.007000s

原因同上,同樣的我們換個(gè)方式處理一下。給窗口指定別名:WINDOW w AS (PARTITION BY 字段1 ORDER BY 字段2)

3、最終處理sql:

DELETE
FROM test
WHERE seq_id in (SELECT seq_idFROM(SELECT *FROM (SELECT ROW_NUMBER() OVER w AS row_num,seq_idFROM test  where out_user_code is not nullWINDOW w AS (PARTITION BY out_user_code ORDER BY seq_id))tWHERE row_num >1)e
)

四、補(bǔ)充:常見(jiàn)的窗口函數(shù)

注:‘參數(shù)’列說(shuō)明該函數(shù)是否可以加參數(shù)。“否”說(shuō)明該函數(shù)的括號(hào)內(nèi)不可以加參數(shù)。
expr即可以代表字段,也可以代表在字段上的計(jì)算,比如sum(col)等。

窗口函數(shù)的一個(gè)概念是當(dāng)前行,當(dāng)前行屬于某個(gè)窗口,窗口由over關(guān)鍵字用來(lái)指定函數(shù)執(zhí)行的窗口范圍,如果后面括號(hào)中什么都不寫(xiě),則意味著窗口包含滿(mǎn)足where條件的所有行,窗口函數(shù)基于所有行進(jìn)行計(jì)算;如果不為空,則有三個(gè)參數(shù)來(lái)設(shè)置窗口:

  • partition by子句:按照指定字段進(jìn)行分區(qū),兩個(gè)分區(qū)由邊界分隔,窗口函數(shù)在不同的分區(qū)內(nèi)分別執(zhí)行,在跨越分區(qū)邊界時(shí)重新初始化。
  • order by子句:按照指定字段進(jìn)行排序,窗口函數(shù)將按照排序后的記錄順序進(jìn)行編號(hào)。可以和partition by子句配合使用,也可以單獨(dú)使用。
  • frame子句:當(dāng)前分區(qū)的一個(gè)子集,用來(lái)定義子集的規(guī)則,通常用來(lái)作為滑動(dòng)窗口使用。
http://www.risenshineclean.com/news/10849.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)價(jià)格明細(xì)表和網(wǎng)站預(yù)算搜索最全的搜索引擎
  • 大興網(wǎng)站建設(shè)優(yōu)化seo網(wǎng)站seo在線(xiàn)診斷分析
  • 自貢網(wǎng)站優(yōu)化市場(chǎng)營(yíng)銷(xiāo)專(zhuān)業(yè)
  • 杭州網(wǎng)站制作報(bào)價(jià)培訓(xùn)機(jī)構(gòu)招生方案模板
  • 高州網(wǎng)站建設(shè)公司百度指數(shù)怎么查
  • 大理裝飾公司做網(wǎng)站營(yíng)銷(xiāo)策劃書(shū)模板
  • 樂(lè)站_網(wǎng)站建設(shè)_自助建站網(wǎng)絡(luò)軟文營(yíng)銷(xiāo)
  • android移動(dòng)應(yīng)用開(kāi)發(fā)網(wǎng)站排名優(yōu)化價(jià)格
  • 晉中網(wǎng)站建設(shè)公司百度我的訂單
  • 在線(xiàn)手機(jī)網(wǎng)站建設(shè)百度官方網(wǎng)站下載
  • 做網(wǎng)站用python好嗎北京seo專(zhuān)業(yè)團(tuán)隊(duì)
  • 網(wǎng)站建設(shè)英文專(zhuān)業(yè)術(shù)語(yǔ)廈門(mén)網(wǎng)站快速排名優(yōu)化
  • 免費(fèi) 微網(wǎng)站友情鏈接的定義
  • 不寫(xiě)編程可以做網(wǎng)站建設(shè)怎么推廣網(wǎng)址
  • 做最最優(yōu)秀的視頻網(wǎng)站有哪些怎么發(fā)布信息到百度
  • l林州住房建設(shè)部官方網(wǎng)站seo查詢(xún)是什么意思
  • 如何在自己的網(wǎng)站上做h5頁(yè)面阿里云搜索引擎入口
  • 哈爾濱工程研究生招生信息網(wǎng)seo必備軟件
  • 創(chuàng)個(gè)網(wǎng)站怎么弄電腦培訓(xùn)學(xué)校
  • led 網(wǎng)站建設(shè)網(wǎng)級(jí)移動(dòng)營(yíng)銷(xiāo)app下載
  • 網(wǎng)站代碼怎么改線(xiàn)上運(yùn)營(yíng)的5個(gè)步驟
  • wordpress教程appseo關(guān)鍵詞布局案例
  • 合肥做網(wǎng)站的的公司有哪些百度推廣要多少錢(qián)
  • wordpress的網(wǎng)站怎么讓他上線(xiàn)網(wǎng)絡(luò)營(yíng)銷(xiāo)的職能是什么
  • wordpress 谷歌西seo優(yōu)化排名
  • 醫(yī)療網(wǎng)站不備案百度熱搜榜排名今日頭條
  • 網(wǎng)站建設(shè)需要什么谷歌google 官網(wǎng)下載
  • 公司名稱(chēng)大全四個(gè)字seo的工作原理
  • php網(wǎng)站服務(wù)器搭建杭州百度首頁(yè)排名
  • 網(wǎng)站開(kāi)發(fā)簡(jiǎn)歷項(xiàng)目經(jīng)驗(yàn)seo服務(wù)工程