[SQL挖掘机] - 窗口函数 - 计算移动平均
介绍:
在窗口函数使用时,计算的是累积到当前行的所有的数据的相关操作。 实际上,还可以指定更加详细的汇总范围。该汇总范围称为 框架 (frame)。
其实这里也可以理解成一个窗口
, 这个窗口
是我们可以进行设置的.
之前我们介绍的窗口函数是根据partition by
进行分组, 然后根据order by
进行排序, 最后根据两者的一个结果输出对应的窗口函数的对应结果, 比如求和, 排序等. 也就是说, 目前的窗口就是该分组内从该组最开始的数据到计算的当前行的数据.
用法:
接下来, 就介绍这个窗口该如何进行设置:
<窗口函数> over (order by <排序用列名> rows n preceding ) <窗口函数> over (order by <排序用列名> rows between n preceding and n following)
其中,
- preceding: 当前行以及之前 xxx 行, 多少行由前面的
n
指定; - following: 当前行以及之后 xxx 行, 多少行由前面的
n
指定;
也介绍一些其他格式, 在窗口函数中,主要有以下几种形式的rows子句:
- “rows unbounded preceding”: 这表示窗口范围从无限制的开始,一直延伸到当前行。换句话说,它会考虑当前行及其之前的所有行。
- “rows n preceding”: 这表示窗口范围从当前行的前n行开始,一直延伸到当前行。这样的语法会包括当前行在内,并考虑当前行之前的n行。
- “rows between unbounded preceding and current row”: 这表示窗口范围从无限制的开始,一直延伸到当前行。这样的语法也会包括当前行在内。
- “rows between n preceding and current row”: 这表示窗口范围从当前行的前n行开始,一直延伸到当前行。这样的语法会包括当前行在内,并考虑当前行之前的n行。
- “rows between current row and unbounded following”: 这表示窗口范围从当前行开始,一直延伸到无限制的结束。这样的语法会包括当前行在内,并考虑当前行之后的所有行。
注意,上述仅列举了一些常见的rows子句形式,实际上你可以根据具体需求来组合和使用不同的rows子句,以定义窗口函数的行范围。
对于"following",它通常与"preceding"结合使用来定义窗口函数的行范围。
- “rows n following”: 这表示窗口范围从当前行的后n行开始,一直延伸到当前行。这样的语法会包括当前行在内,并考虑当前行之后的n行。
- “rows between current row and n following”: 这表示窗口范围从当前行开始,一直延伸到当前行的后n行。这样的语法会包括当前行在内,并考虑当前行之后的n行。
- “rows between unbounded preceding and n following”: 这表示窗口范围从无限制的开始,一直延伸到当前行的后n行。这样的语法会考虑当前行及其之前的所有行,并且还包括当前行之后的n行。
需要注意的是,在使用"following"时,窗口函数将根据当前行为基准,在当前行的前/后指定的行数范围内进行计算。如果没有明确指定"preceding"或"following",默认情况下会假定为"preceding"。
拓展:
这里可能有些同学会有些疑问, 同时我个人也有一些疑问:
"rows between n preceding and current row" 和 "rows n preceding" 的区别是?
“rows between n preceding and current row” 和 “rows n preceding” 在使用窗口函数中有一些区别。
“rows between n preceding and current row” 表示窗口范围从当前行的前n行开始,一直延伸到当前行。这样的语法会包括当前行在内,并考虑当前行之前的n行。
举个例子,如果有一个结果集包含了10行数据,而你使用的窗口函数语法是"rows between 2 preceding and current row",那么对于第5行,窗口函数将计算从第3行到第5行的数据。
另一方面,“rows n preceding” 表示窗口范围从当前行的前n行开始,一直延伸到当前行。这样的语法也会包括当前行在内,并考虑当前行之前的n行。
区别在于"rows between n preceding and current row" 是窗口函数的一部分,用于定义窗口的起点和终点,使我们可以在范围内进行计算。而"rows n preceding" 则表示只计算当前行之前的n行,没有定义在窗口内的其他行。
简而言之,“rows between n preceding and current row” 定义了一个窗口范围,包括当前行及其之前的n行。而"rows n preceding" 只表示计算当前行之前的n行数据,没有定义窗口范围。
这样两者的优缺点是?
优点:
“rows between n preceding and current row”:
具备更灵活的窗口范围定义能力,可以根据实际需求定义窗口的起点和终点。
适用于需要在当前行及其之前的一定范围内进行复杂计算或分析的场景。
“rows n preceding”:
简洁明了,只计算当前行之前的固定行数,不需要定义窗口范围。
在只需要简单地获取当前行之前某个固定行数的数据时,使用较为方便。
缺点:
“rows between n preceding and current row”:
尽管提供了灵活性,但语法上相对复杂一些,需要指定起点和终点,可能需要更长的语句来表达窗口范围。
“rows n preceding”:
无法定义窗口范围,只能计算固定行数的数据,不适用于需要更复杂的窗口计算场景。
不支持动态调整窗口大小,只能固定在当前行之前的特定行数。
总体而言,选择使用哪种形式取决于具体的需求和计算场景。如果需要更精细的窗口范围定义和复杂的计算,建议使用"rows between n preceding and current row"。如果仅需要获取当前行之前固定行数的数据,可以选择"rows n preceding"。
但是实现的效果应该是一样的吧?
是的,从计算结果的角度来看,“rows between n preceding and current row” 和 “rows n preceding” 在大多数情况下会得到相同的结果。两者都可以用于限定窗口函数计算的行范围,并获取相同的数据。
然而,这两种语法的主要区别在于语义和灵活性。“rows between n preceding and current row” 提供了更明确和灵活的方式来定义窗口范围,使得代码更加易读和可维护。它允许我们更准确地控制窗口的起点和终点。而 “rows n preceding” 则是一种简化的形式,只能计算固定行数的数据,并且无法指定窗口的终点。
因此,虽然实现的效果可能是相同的,但选择使用适当的语法形式可以提高代码的可读性和可维护性。根据具体的需求和场景选择合适的语法形式是很重要的。
相关文章:
[SQL挖掘机] - 窗口函数 - 计算移动平均
介绍: 在窗口函数使用时,计算的是累积到当前行的所有的数据的相关操作。 实际上,还可以指定更加详细的汇总范围。该汇总范围称为 框架 (frame)。 其实这里也可以理解成一个窗口, 这个窗口是我们可以进行设置的. 之前我们介绍的窗口函数是根据partition…...
域名和hostname
最近用git克隆远程仓库时总是超时,报错说是代理的问题,但打开和关闭代理都没能解决问题,后面了解到可以关闭git命令的全局代理: git config --global --unset http.proxy git config --global --unset https.proxy如果下次要用的…...
echarts 甘特图一组显示多组数据
<template><el-button type"primary" click"addlin">添加线</el-button><el-button type"success" click"addArea">添加区域</el-button><div ref"echart" id"echart" class&qu…...
1139. 最大的以 1 为边界的正方形;2087. 网格图中机器人回家的最小代价;1145. 二叉树着色游戏
1139. 最大的以 1 为边界的正方形 核心思想:枚举正方向的右下角坐标(i,j),然后你只需要判断四条边的连续一的最小个数即可,这里是边求连续一的个数同时求解结果。 087. 网格图中机器人回家的最小代价 核心…...
css滚动条的使用
前言: css滚动条的使用。 1、使用案例1:背景不要,只展示一个滚动条 如果是默认整体,::就够用了,如果是某个元素,可以 .abc:: ,如果是scss这种的 &:: ::-webkit-scrollbar {width: 6px; } ::-webkit…...
优化Python代理爬虫的应用
当我们在资源受限的环境中使用Python代理爬虫时,我们需要采取一些优化措施,以确保程序的高效性和稳定性。在本文中,我将分享一些关于如何优化Python代理爬虫在资源受限环境下的应用的实用技巧。 首先我们来了解,哪些情况算是资源…...
[C++] STL_vector使用与常用接口的模拟实现
文章目录 1、vector的介绍2、vector的使用2.1 vector的定义2.2 vector迭代器的使用2.3 vector的空间增长问题 3、vector的增删查改3.1 push_back(重点)3.2 pop_back(重点)3.3 operator[](重点)3.4 insert3.…...
【LeetCode】167. 两数之和 II - 输入有序数组 - 双指针
目录标题 2023-8-23 09:25:08 2023-8-23 09:25:08 自己写的不是常量级的额外空间,但是写出来了,记录一下。 下次写的时候,请用双指针。 (其实我想了想一想,双指针就没感觉出来:因为我只想到双指针两个都…...
YOLOV1
YOU ONLY LOOK ONCE...
美团增量数仓建设新进展
摘要:本文整理自美团系统研发工程师汤楚熙,在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分: 建设背景核心能力设计与优化业务实践未来展望 点击查看原文视频 & 演讲PPT 一、美团增量数仓的建设背景 美团数仓架…...
LeetCode解法汇总2337. 移动片段得到字符串
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你两个字…...
Fpass与Fstop
在MATLAB中,“Fpass”、“Fstop”、"Apass"和"Astop"是数字滤波器设计中常用的参数。它们用于定义滤波器的频率响应和滤波器的性能。 "Fpass"表示通带频率,指的是滤波器允许通过的频率范围。在数字滤波器设计中࿰…...
Java快速入门体验
Java快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Maven安装2.1 Maven介绍2.2 Maven安装包下载2.3 Maven安装2.4 Maven初始化 三、Java安装3.1 JDK下载3.2 JDK安装3.3 JDK初始化 四、开发环境搭建4.1 安装开发工具4.2 关联Maven环境4.2.1 新建JAVA项目4.2.2 Maven与…...
父组件传给子组件的数据是异步的,为什么会导致子组件比父组件先执行?
当父组件传递给子组件的数据是异步获取的时候,可能会导致子组件先执行的问题。这是因为在 Vue 的更新机制中,当组件的模板开始渲染时,会立即触发子组件的创建和挂载过程,而父组件的数据可能还没有完全加载完成。 具体来说…...
泛型编程 学习笔记
#include "iostream"using namespace std;template<typename T> void Print(T a) {cout << a << endl; }int main() {int a 5;double b 2.3;char c e;string d "sdfasd";Print(a);Print(b);Print(c);Print(d);return 0; } 它可以不用…...
电脑文件删除了可以找回吗?分享一种简单恢复删除电脑文件办法!
电脑文件删除了可以找回吗?可以。在原理上讲电脑删除的文件是有希望恢复的,因为操作系统在删除文件的时候并会不会立刻将文件彻底删除。当文件被删除的时候,其文件记录被删除,并且被文件占用的磁盘空间被标记为空闲。 这样对于用户…...
Pygame编程(4)event模块
Pygame编程(4)event模块 函数示例 函数 pygame.event.pump 让 Pygame 内部自动处理事件pygame.event.get 从队列中获取事件pygame.event.poll 从队列中获取一个事件pygame.event.wait 等待并从队列中获取一个事件pygame.event.peek 检测某类型事件是否在…...
Python数据采集实战-使用BeautifulSoup框架解析HTML文档并提取所需内容(附源码和实现效果)
实现功能 使用BeautifulSoup框架解析HTML文档并提取所需内容的例子:假设我们要从以下HTML文档中提取所有超链接的链接地址 实现代码 from bs4 import BeautifulSoup import requests# 发送请求并获取HTML文档 url "https://www.baidu.com" response r…...
Java“牵手”天猫商品列表数据,关键词搜索天猫商品数据接口,天猫API申请指南
天猫商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取天猫商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问天猫商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…...
idea切换Git分支时保存未提交的文件
解决方案 我们现在有三个分支,如下图: 我们目前在tenant分支上进行开发,需要去修复master的Bug,假设我们在tenant分支上修改了一个文件,如下图: 方法一:使用Shelve Changes 1、选中tenant上你不…...
Qt串口通信学习文档
这是官方文档,我也在学习。 QSerialPort Class | Qt Serial Port 5.15.14https://doc.qt.io/qt-5/qserialport.html...
018-时间处理库,预处理
018-时间处理库,预处理 ⼀、C语⾔的时间处理库 time.h是C/C++中的⽇期和时间头⽂件,通过他可以获取系统时间及时间格式 转换 time库中常⽤函数介绍 1、函数名称: time 2、函数名称: localtime 3、函数名称: asctime 4、函数名称: ctime 5、函数名称: gmtime 6、函数名…...
Sketch 98 中文版-mac矢量绘图设计
Sketch是一款专为Mac操作系统设计的矢量图形编辑软件,被广泛应用于UI/UX设计、网页设计、移动应用设计等领域。Sketch提供了各种工具和功能,包括绘图、图形设计、排版等,可以帮助设计师轻松地创建高质量的矢量图形和模型。Sketch的主要特点包…...
Springboot继承Keycloak实现单点登陆与退出
由于网上博客大部分都只有登陆没有退出,自己花了一些时间研究了一下,这里将相关内容进行记录,基于Keyclaok 20的版本,实现springboot服务单点登录与退出 一、依赖 <!-- 在父工程中 --> <dependencyManagement><d…...
天眼查接口 查询企业信息API 企查查接口
item_get-获得tyc详情 tyc.item_get 公共参数 请求地址: https://api-gw.cn/tyc/item_get 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中࿰…...
Linux 网络编程 和 字节序的概念
网络编程概述 不同于之前学习的所有通讯方法,多基于Linux内核实现,只能在同一个系统中不同进程或线程间通讯,Linux的网络编程可以实现真正的多机通讯! 两个不相关的终端要实现通讯,必须依赖网络,通过地址…...
unet pytorch
1.单机多卡版本:代码中的DistributedDataParallel (DDP) 部分对应单机多卡的分布式训练方式 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from torchvisi…...
前置微小信号放大器的作用是什么
前置微小信号放大器是一种电子设备,用于将弱信号放大到足够的水平以供后续处理。它在许多领域都有广泛的应用,如通信系统、无线电接收机、传感器接口等。 前置微小信号放大器的主要作用是增加信号的强度。当我们处理微弱信号时,如果不进行放大…...
一百六十五、Kettle——用海豚调度器调度Linux资源库中的kettle任务脚本(亲测、附流程截图)
一、目的 在Linux上脚本运行kettle的转换任务、无论是Linux本地还是Linux资源库都成功后,接下来就是用海豚调度Linux上kettle任务 尤其是团队开发中,基本都要使用共享资源库,所以我直接使用海豚调度Linux资源库的kettle任务脚本 二、前提条…...
xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路
ext4 文件系统扩容、缩容操作 扩容系统根分区 根文件系统在 /dev/VolGroup/lv_root 逻辑卷上,文件系统类型为ext4,大小为10G,现在要将其扩容成20G。 给空闲空间分区# 调整分区类型为LVM,也就是8e类型 fdisk /dev/sdb# 选定分区后使…...
wordpress 嵌入 php/昆明网络营销公司哪家比较好
经典好文推荐,通过阅读本文,您将收获以下知识点: 一、概览 二、Camera HIDL 接口 三、Camera Provider 主程序 四、Camera HAL3 接口 一、概览 始于谷歌的Treble开源项目,基于接口与实现的分离的设计原则,谷歌加入了Camera Provi…...
十堰网站建设怎么样/网站收录平台
pgmemcache是一系列的PostgreSQL函数, 用于memcache的读写操作. 通过pgmemcache以及PostgreSQL的触发器可以方便的对数据库中的数据进行缓存. 当然缓存的操作也可以挪至应用程序自己来处理. pgmemcache只是一种选择.本文涉及的环境如下 : CentOS 5.7 x64 PostgreSQL 9.2.0 libe…...
wordpress的php版本/国外网站排行
python中int指的是什么意思发布时间:2020-11-04 11:51:20来源:亿速云阅读:67作者:小新小编给大家分享一下python中int指的是什么意思,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!…...
常用的oa系统办公软件/如何进行搜索引擎优化
正确理解单周期处理器的“数据通路” 这种是属于不懂会一脸懵逼,但理解了就会清晰畅快的知识点。 记录一下自己的理解: 建立数据通路的目的是为了让指令更好的执行,最基本的五个步骤:取指、译码、执行、访存、回写。与之相应的&am…...
公司设计网站需要多少钱/营销推广型网站
原标题:浪潮信息打造新型液冷超算方案,助力创新港建设高性能计算平台当下,高性能计算平台是数字技术发展的主要驱力,同时也是科学发展、人才培养、服务社会的重要支撑。浪潮信息聚焦西安交通大学师生以及中国西部科技创新港科研人…...
池州做网站培训/小程序免费制作平台
东方网1月21日消息:尽管所有火车票都实行了实名制,记者昨天暗访发现,依然有个别黄牛在火车站附近兜售热门线路的火车票。应对倒票的新花招,铁路部门与黄牛展开了一场“技术战”。 探访 黄牛称可弄到实名车票 昨天下午近4时&#x…...