本文标识 :MQ0018

本文编辑 :长安月下赏美人儿

编程工具 :MySQL、DBeaver

阅读时长 :6分钟

1、头尾函数

(1)应用场景:快速查看某个窗口范围中的第一个或者最后一个指定的字段的数值

(2)头尾函数分类及基础语法

FIRST_value(指定字段)OVER(PARTITION BY 分区的字段 ORDER BY 排序的字段 DESC/ASC)LAST_value(字段)OVER (PARTITION BY 分区字段 ORDER BY 排序的字段 DESC/ASC)

(3)两种头尾函数的区别

first_value() 函数

指定排序字段,不同分区中,指定字段在窗口范围第一个值

last_value() 函数

指定排序字段,不同分区中,指定字段在窗口范围最后一个值

(4)实例比较两种头尾函数

SELECT t2.*,FIRST_value(t2.amt)OVER()AS f1,LAST_value(t2.amt)OVER()AS l2FROM(SELECT t1.dimShopID,t1.dimDateID,SUM(AMT) AS amtFROM dw.fct_sales AS t1WHERE dimDateID BETWEEN 20170801 AND 20170810GROUP BY t1.dimShopID,t1.dimDateID)AS t2ORDER BY dimShopID,amt DESC;

数据结果:

注意:当函数后无指定分区及排序字段,即 over() 括号内容为空,则会出现上面的结果。

如果函数后有指定的分区及排序的字段又会如何呢?!

此刻,将分享的知识点为窗口的滑动函数!!!

2、滑动函数

(1)基础语法与头尾函数相似

(2)作用:在 over() 中以参数限制窗口分析范围

(3)表示行范围语法

BETWEEN frame_start AND frame_end

(4)frame_start 和 frame_end 如下关键字,精准确定窗口函数分析范围

CURRENT ROW :边界是当前行,常与其他关键字组合使用

UNBOUNDED PRECEDING :边界是分区中的第一行

UNBOUNDED FOLLOWING :边界分区中的最后一行

expr PRECEDING:边界为以当前行减去 expr 数值

expr FOLLOWING:边界为以当前行加上 expr 数值

(5)举例

#窗口范围是当前行,前 2 行,后 1 行,共计 4 行记录RANGE BETWEEN 2 PRECEDING AND 1 FOLLOWING

#窗口范围是当前行到分区中的最后一行RANGE UNBOUNDED FOLLOWING

#窗口范围是当前分区中所有行RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

(6)实例展示窗口滑动函数

SELECT t2.*,FIRST_value(t2.amt)OVER(PARTITION BY dimShopID ORDER BY t2.amt DESC)AS f1,LAST_value(t2.amt)OVER(PARTITION BY dimShopID ORDER BY t2.amt DESC)AS l2FROM(SELECT t1.dimShopID,t1.dimDateID,SUM(AMT) AS amtFROM dw.fct_sales AS t1WHERE dimDateID BETWEEN 20170801 AND 20170810GROUP BY t1.dimShopID,t1.dimDateID)AS t2ORDER BY dimShopID,amt DESC;

数据结果:

注意:经过对比发现,在没有加入限定范围的情况下,得到的结果,并不是理想中的结果。l2 数据列,数据值是混乱的,并不是每个分组中最小的值。

为什么会出现这种情况?!

因为,窗口函数,默认限制范围是第一行到当前行!!!

分析:

目前以 dimShopID 分成两组,且以 amt 数列倒序排列,理想中的结果 l2 数列,当 dimShopID =33 时,数值应当为 37,233.64;当 dimShopID =34时,数值应当为 44,691.52;

因窗口函数,默认限制范围是第一行到当前行,所以 l2 数列呈现与 amt 数列相同。

添加限制范围,则

SELECT t2.*,FIRST_value(t2.amt)OVER(PARTITION BY dimShopID ORDER BY t2.amt DESC)AS f1,LAST_value(t2.amt)OVER(PARTITION BY dimShopID ORDER BY t2.amt DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)AS l2FROM(SELECT t1.dimShopID,t1.dimDateID,SUM(AMT) AS amtFROM dw.fct_sales AS t1WHERE dimDateID BETWEEN 20170801 AND 20170810GROUP BY t1.dimShopID,t1.dimDateID)AS t2ORDER BY dimShopID,amt DESC;

数据结果:

猜 你 喜 欢

firstvalue函数mysql_MySQL 窗口函数之头尾函数相关推荐

  1. html中inline函数,开窗函数和窗口函数区别 inline函数和一般的函数有什么不同

    sql over开窗函数 和group by的区别 / 蓝讯如果有多个聚合函数,但是分组依据不同,此时只能使用开窗函数. 而GROUP BY要求聚合函数的分组依据一致. SQL Server中的开窗函 ...

  2. 创建全局函数mysql_MySQL系列(十):函数

    将一段代码块封装到一个结构中,在需要执行代码块的时候调用结构,可以提高代码的复用性. 任何函数都有返回值,因此函数的调用通过select调用. 一.系统函数 Mysql系统定义好的函数,可以直接使用. ...

  3. imread函数、窗口函数、imshow函数、imwrite函数等

    1.imread函数 首先,我们看imread函数,可以在OpenCV官方文档中查到其原型如下: [cpp] view plaincopy Mat imread(const string& f ...

  4. instr函数 mysql_MySQL数据库下 INSTR函数功能简介说明

    摘要: 下文讲述MySQL数据库下INSTR函数的功能及举例说明,如下所示: MySQL INSTR 功能及语法说明 INSTR 函数功能,返回指定字符串在源字符串的起始位置 INSTR 函数语法: ...

  5. mysql开窗函数有哪些_mysql开窗函数

    开窗函数: 它可以理解为记录集合,开窗函数也就是在满足某种条件的记录集合上执行的特殊函数. 对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种属于静态窗口: 有的函数则 ...

  6. 函数分类,HIVE CLI命令,简单函数,聚合函数,集合函数,特殊函数(窗口函数,分析函数,混合函数,UDTF),常用函数Demo

    1.1. 函数分类 1.2. HIVE CLI命令 显示当前会话有多少函数可用  SHOW FUNCTIONS; 显示函数的描述信息  DESC FUNCTION concat; 显示函数的扩展描述信 ...

  7. sql server累计求和函数_窗口函数 以及 储存过程 create procedure

    窗口函数-常见用法,每组内排名 比如,找出每个部门工资前三高的员工等 什么是窗口函数 窗口函数,OLAP函数,online analytical processing,联机分析处理,可以对数据库数据进 ...

  8. SQL:开窗函数(窗口函数)

    4. 窗口函数 目录 4. 窗口函数 4.1 排序窗口函数rank 4.2 rank(), dense_rank(), row_number()区别 4.3 .排序截取数据lag(),lead(),n ...

  9. Hive常用函数介绍(窗口函数)

    1.窗口函数介绍 窗口函数,也叫也叫OLAP函数(Online Anallytical Processing,联机分析处理),可对数据库数据进行实时分析处理. 2.窗口函数入门 2.1 函数说明 窗口 ...

最新文章

  1. phpcurl 请求Chunked-Encoded data 遇到的一个问题
  2. python升级命令出现错误_python - _tkinter.TclError:无法调用“ update”命令:应用程序已被破坏错误 - 堆栈内存溢出...
  3. python输出子列表_python利用递归函数输出嵌套列表的每个元素
  4. 什么是服务的熔断降级
  5. Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点 目录 1. 应该具有的功能 1 1.1. 元数据 API 1 1.2. 分布式事务 vs事务中使用 Savepoint 1
  6. 使用U盘全新安装Mac OS X EI Capitan
  7. Eplan 各版本 软件 百度网盘 永久链接
  8. python:库文件整理
  9. 国家开放大学专科计算机应用实训项目,国家开放大学电大专科《微机系统与维护》网络课实训1实训3作业及答案.docx...
  10. mysql新增一个常数列_添加常数列
  11. 三相全桥整流电路_什么是三相桥式全控整流电路,三相桥式全控的工作原理是什么,三相桥式全控电路电路图...
  12. Java项目:问卷调查系统(java+SSM+layui+JSP+Mysql)
  13. 前辈们的面试经验总结——对于BAT等企业如何面试之面试流程及问题解析、以及面试时的基本礼仪及着装
  14. 高新企业认定后的条件
  15. cgal配置以及一些资料
  16. 学习mongo系列(四) find().pretty() remove() 查询
  17. VLC的ACtiveX插件使用方法
  18. python函数的应用
  19. 4.CSS层叠样式表一
  20. mysql常用 的数据库引擎

热门文章

  1. python中小学生编程学习-小学生python编程在线教育-小码精灵编程线上教育机构...
  2. java项目日志打印总结
  3. win10关机后cpu风扇还在转_win10关机后风扇一直转,长按电源键才关闭怎么办
  4. WPS文字怎么设置页面如分隔符、背景、页面边框等等
  5. 联想Y50-70笔记本更换固态硬盘SSD记录
  6. SLD各地物配置文件
  7. 当MySQL想恋爱,java和navicate抢着做媒婆 ------ java连接MySQL数据库 navicat for MySQL 连接
  8. 逆向爬虫08 并发异步编程
  9. PS动作快速把图片做成手绘油漆涂鸦画效果
  10. 斐讯k3怎么设置虚拟服务器,斐讯K3路由器无线中继怎么设置?