一. 窗口函数

窗口函数(OLAP 实时分析处理函数) ,可以一般聚合函数无法实现的高级操作。诸如排序、生成序列号等功能。目前 DBMS 逐步都完成了对窗口函数的支持,唯独 MySql 不支持(但是 Mysql 8 开始支持了)。

1. 窗口函数语法:

<窗口函数> OVER ([PARTITION BY <列清单>]
ORDER BY <排序用列清单>)

语法解释:

  • 窗口函数分两类 (1.能够作为窗口函数的聚合函数 2.RANK、DENSE_RANK、ROW_NUMBER 等专用窗口函数)

  • PARTITION BY : 设定排序的对象范围

  • ORDER BY : 指定按照哪一列、何种顺序进行排序

2. 专有开窗之一 (RANK函数)、快速了解开窗函数使用

RANK函数 : 用于计算记录排序的函数

例子表

需求: 根据不同的商品种类(product_type),按照销售单价(sale_price) 从低到高的顺序排序 ?

答案解析

总结 :PARTITION BY 横向对表进行分组、ORDER BY 决定纵向排序的规则。通过 PARTITION BY 分组后的集合称为窗口。

2.1 不使用 PARTITION BY 情况下:

例子

换一个排序的开窗函数也是排序的试试:DENSE_RANK 函数

例子

再换一个排序的开窗函数也是排序的试试:ROW_NUMBER 函数

例子

总结 : DENSE_RANK 、RANK、ROW_NUMBER 都是排序的。DENSE_RANK 在处理并列值的时候,并列值不占位。ROW_NUMBER 是排序是连续的,不管值是否相同

3. 聚合函数作为窗口函数使用

聚合函数作为窗口函数应用的场景一般为累计统计的时候
注意 在 sqlserver 2012以前不支持聚合函数开窗求和
看例子:

SELECT
    product_id,
    product_name,
    sale_price,
    avg ( sale_price ) OVER ( ORDER BY product_id ) AS current_sum
FROM
    Product;

本人安装的sqlserver 08 不支持。mysql 本人是 5.7 不支持开窗函数,准备装 ORACLE 麻烦。。尼玛,懒得搞。 计算移动平均 肯定也不支持。就这样吧。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分析函数,也称为窗口函数,通常被认为仅对数据仓库SQL有用。使用分析函数的查询,基于对数据行的分组来计算总量值。与...
    猫猫_tomluo阅读 8,657评论 3 18
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,150评论 0 13
  • 这一周主要学习了 Hive 的一些基础知识,学习了多个 Hive 窗口函数,虽然感觉这些窗口函数没有实际的应用...
    大石兄阅读 7,797评论 2 8
  • over在聚合函数中的使用:一般格式:聚合函数名(列) over(选项)over必须与聚合函数或排序函数一起使用...
    酸甜柠檬26阅读 10,800评论 0 5
  • 文/山山 高迪是我的女朋友。 我跟她认识有四年了。前两年的时间里,我们是很好的朋友,我喜欢看她笑,喜欢和她说话,喜...
    爱唱歌的十月阅读 2,622评论 0 2