窗口函数的详解

目录

        一、窗口函数的组成部

        二、窗口函数的类型

        三、窗口函数的排序和分区

        四、窗口函数的窗口框架

        示例


一、窗口函数的组成部分

  1. 窗口函数本身:这是执行计算的函数,如 SUM(), AVG(), ROW_NUMBER() 等。

  2. OVER子句:定义了窗口函数的计算范围。它由三部分组成:

    • PARTITION BY:将数据集分成多个独立的组,每个组内部进行计算。如果省略,整个数据集被视为一个单一的分区。
    • ORDER BY:在每个分区内对数据进行排序,这会影响某些窗口函数的计算结果,如 ROW_NUMBER()RANK() 等。
    • ROWS或RANGE:定义了窗口的物理大小,即函数作用的行数范围。ROWS 是基于行号的,而 RANGE 是基于值的范围。
  3. 窗口框架(Frame):在某些窗口函数中,你可以通过窗口框架进一步细化窗口的大小。窗口框架可以是静态的(如 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)或动态的(如 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)。

二、窗口函数的类型

  1. 聚合函数:如 SUM(), AVG(), MIN(), MAX() 等,它们计算分区内所有行的聚合值。

  2. 排名函数:如 ROW_NUMBER(), RANK(), DENSE_RANK() 等,它们为分区内的每一行分配一个唯一的序号或排名。

  3. 偏移函数:如 LEAD(), LAG() 等,它们允许你访问当前行的前面或后面的行的值。

三、窗口函数的排序和分区

  • PARTITION BY:这个子句将结果集分成多个独立的分区,每个分区都是一个独立的数据集,窗口函数在每个分区上独立计算。例如,如果你按部门对员工数据进行分区,每个部门将有自己的窗口函数计算结果。

  • ORDER BY:这个子句在每个分区内对行进行排序。对于排名函数,ORDER BY 子句决定了行的排名顺序。对于聚合函数,ORDER BY 子句决定了窗口的计算顺序。

四、窗口函数的窗口框架

  • ROWS:基于行号的窗口框架,可以是固定的行数(如 ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING),也可以是相对于当前行的位置(如 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)。

  • RANGE:基于值的范围的窗口框架,它允许你基于列的值来定义窗口的大小。例如,RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING 会创建一个窗口,其中包含当前行和与当前行具有相同值的行。

示例

假设我们有一个销售数据表,包含日期和销售额:

SELECTdate,sales,SUM(sales) OVER (PARTITION BY date ORDER BY time) AS running_total,ROW_NUMBER() OVER (PARTITION BY date ORDER BY time DESC) AS sales_rank
FROMsales_data;

这个查询会返回每天的销售额,以及每个日期的销售额的运行总计和销售额排名。

  • SUM(sales) OVER (PARTITION BY date ORDER BY time) 会计算每个日期的销售额的累计总和。
  • ROW_NUMBER() OVER (PARTITION BY date ORDER BY time DESC) 会为每个日期的销售额按时间降序排列,并为每行分配一个唯一的序号。

开窗函数的灵活性和强大功能使得它们在处理复杂的数据分析任务时非常有用。通过合理地使用分区、排序和窗口框架,你可以实现各种复杂的数据计算和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467042.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VS+QT】联合开发踩坑记录

最新更新日期:2024/11/05 0. 写在前面 因为目前在做自动化产线集成软件开发相关的工作,需要用到QT,所以选择了VS联合开发,方便调试。学习QT的过程中也踩了很多坑,在此记录一下,提供给各位参考。 1. 环境配…

flutter 专题四 Flutter渲染流程

一、 Widget - Element - RenderObject关系 二、 Widget 、Element 、RenderObject 分别表示什么 2.1 Widget Widget描述和配置子树的样子 Widget就是一个个描述文件,这些描述文件在我们进行状态改变时会不断的build。但是对于渲染对象来说,只会使用最…

芯片需要按一下keyup或者复位按键虚拟或者下载之后芯片能下载却运行不了或者需要额外供电。

这些问题很有可能是因为外围电路器件幅值与设计不同的存在,导致你需要外部供电才能实现一个正常运行,可以检查一下外围电路在供电区域的电流区,电阻幅值是否和原理图设计时看的一模一样或者直接更换 因为按键会失灵,首先检查复位按…

React基础大全

文章目录 一、React基本介绍1.虚拟DOM优化1.1 原生JS渲染页面1.2 React渲染页面 2.需要提前掌握的JS知识 二、入门1.React基本使用2.创建DOM的两种方式2.1 使用js创建(一般不用)2.2 使用jsx创建 3.React JSX3.1 JSX常见语法规则3.2 for循环渲染数据 4.模…

leetcode 2043.简易银行系统

1.题目要求: 示例: 输入: ["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"] [[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]] 输出&#xff…

【网络】网络层协议IP

目录 IP协议报头 报头分离和向上交付 四位版本 8位服务类型 16位总长度 八位生存时间 16位标识一行 网段划分 DHCP 私有IP范围 公网划分之CIDR 特殊的IP地址 缓解IP地址不够用的方法 NAT技术 代理服务器 NAT和代理服务器的区别 内网穿透和内网打洞 路由 IP是…

Qt菜单功能实现

本文介绍Qt菜单功能实现。 Qt开发过程中,菜单功能用的还是比较多的,本文针对菜单栏和右键菜单功能实现作简要描述。 1.菜单栏 1)界面设计 在界面中添加菜单栏(本例中名为“menubar”),并依次添加需要的菜单&#x…

2024 网鼎杯 - 青龙组 Web WP

2024 网鼎杯 - 青龙组 WEB - 02 打开容器一个登录界面,随便输入账号密码可以进到漏洞界面 这里有一个发送给boss的功能,一眼xss 有三个接口:/flag 、/update 、/submit /flag :要求boss才能访问,/update &#xf…

MySQL核心业务大表归档过程

记录一下2年前的MySQL大表的归档,当时刚到公司,发现MySQL的业务核心库,超过亿条的有7张表,最大的表有9亿多条,有37张表超过5百万条,部分表行数如下: 在测试的MySQL环境 : pt-archiv…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据,从而使CPU去完成更重要的任务,不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

大数据分库分表方案

分库分表介绍 分库分表应用场景 分库分表介绍 大数据分库分表是一种数据库架构技术,旨在应对大数据量场景下的数据库性能瓶颈。以下是对大数据分库分表的详细解释: 一、定义与背景 定义: 分库:将一个大型数据库按照一定的规则…

基础算法练习--滑动窗口(已完结)

算法介绍 滑动窗口算法来自tcp协议的一种特性,它的高效使得其也变成了算法题的一种重要考点.滑动窗口的实现实际上也是通过两个指针前后遍历集合实现,但是因为它有固定的解题格式,我将其单独做成一个篇章. 滑动窗口的解题格式: 首先,定义两个指针left和right,与双指针不同的…

【spark的集群模式搭建】Standalone集群模式的搭建(简单明了的安装教程)

文章目录 1、使用Anaconda部署Python2、上传、解压、重命名3、创建软连接4、配置spark环境变量5、修改 spark-env.sh配置文件6、启动hdfs,创建文件夹7、修改spark-defaults.conf配置文件8、修改workers配置文件9、修改log4j.properties配置文件(可选&…

Unity中IK动画与布偶死亡动画切换的实现

在Unity游戏开发中,Inverse Kinematics(IK)是创建逼真角色动画的强大工具。同时,能够在适当的时候切换到布偶物理状态来实现死亡动画等效果,可以极大地增强游戏的视觉体验。本文将详细介绍如何在Unity中利用IK实现常规…

2024阿里云CTF Web writeup

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 前言 又是周末…

云端到本地:深度学习日志与模型文件一键传输【详解 SCP 命令】

在深度学习项目中,模型的训练通常会在远程云服务器上进行。此过程会生成大量日志文件和模型文件(如检查点文件、模型权重等),这些文件对于后续的分析、调试和备份至关重要。本文将介绍如何使用 scp 命令,将云服务器上的…

第10章 多表查询

一、什么是多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立…

如何让ffmpeg运行时从当前目录加载库,而不是从/lib64

程序在linux下运行时,一般从 /lib64 目录下加载依赖的库文件,如xxx.so. 有时候,系统里没有这些库,也不想从系统目录下加载,怎么办呢? 看下面的调整过程。 使用的源代码是 ffmpeg-6.1.tar.xz 解压后&…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3

本系列文章记录“智能提醒助理”产品建设历程,记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级的过程,遇到的问题和解决方案。 一、需求出发点 智能提醒小程序 当前使用的是jdk8,springboot2.3,升级到jdk21和springboot3.3 学…

Redis-07 Redis哨兵

操作实现 此处应该6台虚拟机,其中3台是哨兵,但因为内存限制没有那么多 1.将sentinel文件拷贝到/myredis目录下 2.sentinel.conf文件重要参数 新建配置文件sentinel26379.conf sentinel26380.conf sentinel26381.conf bind 0.0.0.0 daemonize yes pr…