美文网首页
MYSQL中实现ORACLE的 over partition b

MYSQL中实现ORACLE的 over partition b

作者: 山水墨阳 | 来源:发表于2023-02-28 21:53 被阅读0次

业务场景

Oracle迁移Mysql,某查询逻辑中用到了
聚合函数( ) OVER ( [ partition by 字段] [order by 字段]) 如:

row_number() over ( PARTITION BY 年级,班级,学科 ORDER BY 分数 DESC ) rn  

比如要实现年级、班级、学科根据分数的维度排名或叫排序等场景。

实现原理

PARTITION 聚合分组部分是相同的,组装成一个字符创也是相同的,根据排序后利用字符串错行对比,条件递增RN

1、用到临时变量@rownum,@grpstr(名称可自定义)
2、将PARTITION BY的条件拼接到一个字符串,赋值给@grpstr
3、利用@grpstr错行对比,与上条不相等则:@rownum:=@rownum+1否则@rownum:=1
4、查询条件最后要根据ORDER BY 部分排序(注意:排序需加上分组部分,起决定性的排序放在最后)
5、RN和RG是临时产生的列信息,外层逻辑有用到就用没有用到忽略之。

案例实现效果如下:

image.png

思想

合理利用动态参数;
有顺序的错行对比;
两组数据多个信息分别相同,这几个信息组合在一起也是相同的。

思想需要意会,有需要指导或交流的可留言!

相关文章

网友评论

      本文标题:MYSQL中实现ORACLE的 over partition b

      本文链接:https://www.haomeiwen.com/subject/eealldtx.html