MySQL 8.0 窗口函数 排名、topN问题
之前自己一直在用mysql5.7,没想到在8.0中加入了一个非常好用的功能---窗口函数,在这里将窗口函数、及其用法、可以解决的问题总结如下
what
窗口函数 --- 又名OLAP函数 --- Online Anallytical Processing,联机分析处理
窗口函数功能是从Oracle搬过来的,看样子Oracle收购mysql也有好处
主要解决业务中的排名与topN问题
how
基本语法:
窗口函数名() over (partition by 分组列名 order by 排序列名) as ranking
(as ranking是常用的命名方式,当然,你可以用别的名字)
分类:
MySQL原有的一些聚合函数也可以用在窗口函数的语法中,当做窗口函数使用,比如sum(),avg(),max(),min(),count()等
这里主要结合问题探讨序号函数
问:"能否对窗口函数返回的结果直接进行过滤"
答:"因为窗口函数的发生位置(顺序)在where和group by之后,所以不能"(请注意,这里说的是“直接”,你当然可以将窗口函数的结果作为一个临时表然后再select...where...)