当前位置:网站首页 > Haskell函数式编程 > 正文

lead函数是聚合函数不是窗口函数对吗(lead()函数)



在数据分析中,窗口函数是我们经常用到的函数,今天的文章我们总结了常用的各类窗口函数并给出实例。

一 创建数据集

二 聚合函数

聚合函数也可用于窗口函数当中,用法和专用窗口函数相同。

聚合函数sum、avg、count、max、min都是针对自身记录以及自身记录以上的所有数据进行计算的。

聚合函数作为窗口函数,可以在每一行的数据里直观看到截止到本行数据,统计数据是多少,比如:按照时间的顺序,计算各时期的销售总额就需要用到这种累计的统计方法。同时也可以看出每一行数据对整体数据的影响。聚合函数的开窗和专用的窗口函数是一致的,其形式为:

‹窗口函数› over (partition by ‹用于分组的列名› order by ‹用于排序的列名›)

聚合函数的窗口函数中,加不加order by,order by的列名是否是用于分组的列名,这些情况都会影响到最终的结果,下面我们分别来讨论各种不同的情况。

2.1 窗口函数有无order by的区别

2.1.1 有order by且order by的字段不是用于分组的字段

这种情况下得到的结果是每个partition的累加的结果

https://zhuanlan.zhihu.com/p/

2.1.2 有order by且order by的字段是用于分组的字段

该情况下得到的数据是每个partition的总和而不是累加

2.1.3 有partition by无order by

该情况下,sum()over()得到的数据是每个partition的总和而不是累加,和第二种情况是一致的。

select *, avg(成绩) over (order by 学号 rows 2 preceding) as current_avg from 班级表;

rows和preceding这两个关键字,是“之前~行”的意思,上面的句子中,是之前2行。也就是得到的结果是自身记录及前2行的平均(相对应的preceding是following)

https://zhuanlan.zhihu.com/p/

三 专用窗口函数

专用窗口函数包括rank() over,dense_rank() over,row_number() over()

查出指定条件后的进行排名。特点是,加入是对学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。

与rank() over的区别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次。

这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名!

四 Lead和 Lag函数

lag和lead函数可以在同一次查询中取出同一字段的前N行数据(lag)和后N行数据(lead)。

lead和lag函数应用场景较为广泛,在计算前一天、前一个月以及后一天、后一个月等时间差时,我们通常会使用自连接来求差值,但是自连接有时候会出现重

复需要额外处理,而通过lag和lead函数正好能够实现这一功能。

语法:LEAD ( scalar_expression [ ,offset ] , [ default ] ) OVER ( [ partition_by_clause ] order_by_clause )

scalar_expression,要返回的值基于指定的偏移量。这是一个返回单个(标量)值的任何类型的表达式。scalar_expression 不能为分析函数。简单地

来说就是,要取的列。

offset默认值为1, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset 不能是负数值或分析函数。简单地来说就

是,取偏移后的第几行数据

default默认值为NULL, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset不能是负数值或分析函数。简单地来

说就是,没有符合条件的默认值

语法:Lag ( scalar_expression [ ,offset ] , [ default ] ) OVER ( [ partition_by_clause ] order_by_clause )

五 分页思想

SQL查询语句中的limit 与 offset 的区别:

limit y 分句表示: 读取 y 条数据

limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据

limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据

看下面例子:

比如分页获取数据:

第1页: 从第0个开始,获取20条数据

第2页: 从第20个开始,获取20条数据

第3页: 从第40个开始,获取20条数据

下面在看几个leetcode上的题目:

--求第二高的薪水

首先先将数据去重:

再将是数据按薪水降序排除:

分页的思想是一页一条数据,第二高的薪水则在第二页:

考虑到极端情况:没有第二薪水则为空,使用ifnull判断:

参考链接

https://zhuanlan.zhihu.com/p/

https://zhuanlan.zhihu.com/p/

https://blog.csdn.net/sinat_/article/details/

https://zhidao.baidu.com/question/1667694010390213187.html

https://www.cnblogs.com/scwbky/p/9558203.html

https://my.oschina.net/wangyongtao/blog/

到此这篇lead函数是聚合函数不是窗口函数对吗(lead()函数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 指数与对数的转换公式(指数与对数的转换公式例题)2024-12-13 17:54:09
  • 支付方式怎么更换快手(快手如何更换支付方式)2024-12-13 17:54:09
  • 密码的加密与解密的方式(密码的加密与解密的方式有哪些)2024-12-13 17:54:09
  • 淘宝更换支付方式怎么设置(淘宝怎么改变支付方式)2024-12-13 17:54:09
  • oracle时间函数 时间差(oracle时间差小时函数)2024-12-13 17:54:09
  • 消息认证码MAC(消息认证码MAC和Hash函数的概念和特点)2024-12-13 17:54:09
  • pd.pivot函数(pivot函数 excel)2024-12-13 17:54:09
  • 一级史上最详细的Word公文格式设置,一看就会! ​​​和二级史上最详细的Word公文格式设置,一看就会! ​​​的格式怎么设置(一级史上最详细的Word公文格式设置,一看就会! ​​​和二级史上最详细的Word公文格式设置,一看就会! ​​​的格式怎么设置)2024-12-13 17:54:09
  • 条件变量函数(条件变量 惊群)2024-12-13 17:54:09
  • docker网络模型(docker4种网络模式)2024-12-13 17:54:09
  • 全屏图片