業(yè)務(wù)場(chǎng)景
Oracle遷移Mysql,某查詢邏輯中用到了
聚合函數(shù)( ) OVER ( [ partition by 字段] [order by 字段]) 如:
row_number() over ( PARTITION BY 年級(jí),班級(jí),學(xué)科 ORDER BY 分?jǐn)?shù) DESC ) rn
比如要實(shí)現(xiàn)年級(jí)坚洽、班級(jí)篱竭、學(xué)科根據(jù)分?jǐn)?shù)的維度排名或叫排序等場(chǎng)景犯戏。
實(shí)現(xiàn)原理
PARTITION 聚合分組部分是相同的屑柔,組裝成一個(gè)字符創(chuàng)也是相同的买乃,根據(jù)排序后利用字符串錯(cuò)行對(duì)比饲漾,條件遞增RN
1蝙搔、用到臨時(shí)變量@rownum,@grpstr(名稱可自定義)
2、將PARTITION BY的條件拼接到一個(gè)字符串考传,賦值給@grpstr
3吃型、利用@grpstr錯(cuò)行對(duì)比,與上條不相等則:@rownum:=@rownum+1否則@rownum:=1
4僚楞、查詢條件最后要根據(jù)ORDER BY 部分排序(注意:排序需加上分組部分勤晚,起決定性的排序放在最后)
5、RN和RG是臨時(shí)產(chǎn)生的列信息镜硕,外層邏輯有用到就用沒(méi)有用到忽略之运翼。
案例實(shí)現(xiàn)效果如下:
思想
合理利用動(dòng)態(tài)參數(shù);
有順序的錯(cuò)行對(duì)比兴枯;
兩組數(shù)據(jù)多個(gè)信息分別相同血淌,這幾個(gè)信息組合在一起也是相同的。
思想需要意會(huì)财剖,有需要指導(dǎo)或交流的可留言悠夯!