当前位置: 首页 > news >正文

SQL:窗口函数之OVER()

窗口函数 通用格式 “函数 OVER (PARTITION BY 分组 ORDER BY 排序依据 升降序)”。
这里记录下OVER() 以及搭配LEAD/LAG函数的使用方法(执行平台Impala)

目录

  • OVER函数
  • 1、不加条件的OVER函数——得到所有的汇总结果
  • 2、仅有排序的OVER函数——得到按顺序的累计结果
  • 3、加分区条件的OVER函数——得到分区的汇总结果
  • 4、加分区、排序条件的OVER函数——得到按分区后按顺序的累计结果
  • 5、加窗口大小条件的OVER函数
    • 5-1 当前行和前1行
    • 5-2 当前行和前面所有行
    • 5-3 当前行和后面所有行
  • 搭配LEAD/LAG函数

OVER函数

1、不加条件的OVER函数——得到所有的汇总结果

select  day1, sale_money, sum(sale_money) over () as `cum_money`  from t

结果1

2、仅有排序的OVER函数——得到按顺序的累计结果

select  day1, sale_money, sum(sale_money) over (order by day1) as `cum_money`  from t

结果2

3、加分区条件的OVER函数——得到分区的汇总结果

select  day1, sale_money, sum(sale_money) over (partition by month(day1)) as `cum_money`  from t

结果3

4、加分区、排序条件的OVER函数——得到按分区后按顺序的累计结果

select  day1, sale_money, sum(sale_money) over (partition by month(day1) order by day1) as `cum_money`  from t

结果4

5、加窗口大小条件的OVER函数

current row 当前行
n preceding:往前n行
n following:往后n行
unbounded: 起点,对应前面的n

5-1 当前行和前1行

select  day1, sale_money, sum(sale_money) over (order by day1 rows between 1 preceding and current row) as `cum_money`  from t

在这里插入图片描述

5-2 当前行和前面所有行

select  day1, sale_money, sum(sale_money) over (order by day1 rows between unbounded preceding and current row) as `cum_money`  from t

在这里插入图片描述

5-3 当前行和后面所有行

select  day1, sale_money, sum(sale_money) over (order by day1 rows between current row and unbounded following) as `cum_money`  from t

在这里插入图片描述

搭配LEAD/LAG函数

lead(col,n) :往后第n行
lag(col,n) :往前第n行

-- 日期按升序排后,取当前往后的第2条数据
select day1, sale_money, lead(day1,2) over (order by day1 asc) as `后第2行day1`, lead(day1,2) over (order by day1 asc) as `后第2行sale_money`
from t

在这里插入图片描述

-- 日期按升序排后,取当前往前的第2条数据
select day1, sale_money, lag(day1,2) over (order by day1 asc) as `前第2行day1`, lag(day1,2) over (order by day1 asc) as `前第2行sale_money`
from t

在这里插入图片描述

相关文章:

  • Redis 的BGSAVE和BGREWRITEAOF操作
  • Vue模块化开发步骤—遇到的问题—解决办法
  • mac 同步安卓手机屏幕
  • 【3DsMax】展UV记录
  • 【每日一问】IOS手机上Charles证书过期怎么办?
  • 【python】python3基础
  • 机器学习 - 训练模型
  • RabbitMQ问题
  • VScode手动安装vsix格式插件,提示安装插件与code版本不兼容问题
  • Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)
  • FloodFill算法——图像渲染
  • 第十二届蓝桥杯省赛CC++ 研究生组
  • ubuntu2310制作离线源
  • GraphPad Prism 10:一站式数据分析解决方案
  • Linux设备驱动开发 - 三色LED呼吸灯分析
  • .pyc 想到的一些问题
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • HTTP请求重发
  • JS 面试题总结
  • mysql innodb 索引使用指南
  • Node 版本管理
  • storm drpc实例
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 今年的LC3大会没了?
  • 力扣(LeetCode)56
  • 两列自适应布局方案整理
  • 聊一聊前端的监控
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何用vue打造一个移动端音乐播放器
  • 系统认识JavaScript正则表达式
  • 小程序开发中的那些坑
  • 正则表达式小结
  • MyCAT水平分库
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​queue --- 一个同步的队列类​
  • ​插件化DPI在商用WIFI中的价值
  • ​一些不规范的GTID使用场景
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # .NET Framework中使用命名管道进行进程间通信
  • #微信小程序:微信小程序常见的配置传值
  • (2)nginx 安装、启停
  • (二)PySpark3:SparkSQL编程
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (六)软件测试分工
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)Unity3DUnity3D在android下调试
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .dwp和.webpart的区别
  • .L0CK3D来袭:如何保护您的数据免受致命攻击