日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql去重取最大值,逻辑类似oracle的over(partition by)函数

發(fā)布時間:2024/7/5 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql去重取最大值,逻辑类似oracle的over(partition by)函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????像下表一樣的數(shù)據(jù),有重復(fù)的合同號,但是我只想保留同一合同號中回款金額最大的那一行,也就是圖中紅框里的數(shù)據(jù)。


oracle方法:

????在oracle中,我們可以簡單地用over(partition by)函數(shù)處理(代碼示例如下),解釋一下就是利用partition by函數(shù)按照合同號分區(qū),在每個分區(qū)內(nèi)再利用order by根據(jù)回款金額排序,where num=1的意思就是取每個分區(qū)中排序第一的那一行。

select row_number()over(partition by 合同號 order by 回款金額 desc) as num from test where num=1

mysql方法:

? ? 但是在mysql中并沒有這樣的函數(shù),我們需要重新寫邏輯(代碼如下),老規(guī)矩解釋一下:第二個select函數(shù)是關(guān)鍵所在,功能就是,當a.`合同號` = b.`合同號`時,我們?nèi)〕鲎畲蟮幕乜罱痤~,當a.`回款金額`等于這個最大的回款金額時,我們認為這一行符合條件并取出,因此a中的每個合同號我們都要執(zhí)行一次第二個select函數(shù),來判斷當前合同號的這一行是否是最大回款金額的這一行。

SELECT a.`合同號`, a.姓名, a.`回款金額` FROM test a WHERE a.`回款金額` = (SELECT MAX(b.`回款金額`) FROM test b WHERE a.`合同號` = b.`合同號`);

? ?運行結(jié)果:

? ??


去重取最小值:

?????如果是去重取最小值,那么代碼如下,簡單地說就是oracle【改升序為降序】,mysql【改最大值為最小值】。

#oracle select row_number()over(partition by 回款金額 order by 回款金額 ASC) as num from test #mysql SELECT a.`合同號`, a.姓名, a.`回款金額` FROM test a WHERE a.`回款金額` = (SELECT MIN(b.`回款金額`) FROM test b WHERE a.`合同號` = b.`合同號`);

總結(jié)

以上是生活随笔為你收集整理的mysql去重取最大值,逻辑类似oracle的over(partition by)函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。