一枚小产品的学习记录
在做sql练习题时了解到的新函数,做个简要的记录,若有不严谨的地方,请指正。
mysql 8.0以上版本才支持窗口函数
以下是个人总结
另外:over(partition by字段1 order by 字段2)中的partition by 字段1 是可以省略的但是order by 字段2 不可省略
详细演示见下文:
本文内使用到的建表、插入数据sql 可在我写的sql面试50题的第一篇文章内找到.
按各科成绩进行排序,并显示排名
#rank()over()的使用
#执行结果如下
#rank()over()的使用,不使用partition by的效果
#执行结果如下
#row_number()over()的使用
#执行结果如下
#dense_rank()over()的使用
#执行结果如下
#****与group by 共同使用
#对学生总成绩进行从大到小排序
#执行结果如下
分别在 MySQL5.7.25-log 和 8.0.16 环境中实现类似Oracle的分析函数(8.0版本中已支持,直接使用即可)。一、创建测试数据
二、row_number() over()
三、rank() over()
四、dense_rank() over()
五、lag() over()
六、lead() over()
七、待补充
例1:不分组,全部数据添加序列号,类Oracle 的rownum伪列
例2:先按roomid分组,再按照deviceid,counter排序,类Oracle 的row_number() OVER(PARTITION BY ORDER BY )
例1:不分组,全部数据按 roomid 排序,再添加序号,类Oracle 的rank() OVER(ORDER BY)
例2:先按roomid分组,再按deviceid排序,类Oracle 的rank() OVER(PARTITION BY ORDER BY)
例1:不分组,全部数据按roomid排序,再添加序号,类Oracle 的dense_rank() OVER(ORDER BY)
例2:先按roomid分组,再按deviceid排序,类Oracle 的dense_rank() OVER(PARTITION BY ORDER BY)
例1:不分组,全部数据按roomid,deviceid升序排序,类Oracle 的lag() OVER(ORDER BY)
例2:先按roomid分组,再按roomid,deviceid排序,类Oracle 的lag() OVER(PARTITION BY ORDER BY)
例1:不分组,全部数据按roomid,deviceid,counter升序排序,类Oracle 的lead() OVER(ORDER BY)
例2:先按roomid分组,再按deviceid,counter排序,类Oracle 的lead() OVER(PARTITION BY ORDER BY)
你这里的rank 就是参数吧。oracle里面rank over 和 group by 是完全不一样的东西。
怎么还功能相似呢。理解不能。
rank over 的用法。
http://oracle.se-free.com/dml/06_rank.html
group by 只是在分组的时候使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)