首页 > 其他分享 >OVER (PARTITION BY xx ORDER BY xx) 窗口函数理解

OVER (PARTITION BY xx ORDER BY xx) 窗口函数理解

时间:2024-08-07 16:51:31浏览次数:9  
标签:01 OVER PARTITION sale Alice xx salesperson 2023 Bob

SUM(sale_amount) OVER (PARTITION BY salesperson ORDER BY sale_date) 这段 SQL 窗口函数的详细解释和它在执行过程中所发生的具体细节如下:

解析步骤

  1. 窗口函数的基础定义
    • SUM(sale_amount):表示我们要对 sale_amount 列应用 SUM 聚合函数。
    • OVER 子句:指定窗口函数的范围和计算顺序。
    • PARTITION BY salesperson:将数据按 salesperson 列分组,即为每个销售人员独立计算。
    • ORDER BY sale_date:指定计算的顺序,即按 sale_date 列排序,按日期先后进行累积计算。

执行的详细步骤

  1. 分区

    • SQL 查询首先根据 PARTITION BY salesperson 子句将 sales 表的数据按 salesperson 列进行分区。每个销售人员的数据会被单独分开,形成多个独立的小组(partition)。
  2. 排序

    • 对每个分区内的数据根据 ORDER BY sale_date 子句进行排序,即按照 sale_date 列从小到大的顺序排列。
  3. 累积计算

    • 对于每个分区内的每一行,按照排序后的顺序逐行计算 SUM(sale_amount)。这意味着对前 N 行的 sale_amount 进行累加,并将结果赋值给当前行。

具体示例

考虑以下 sales 表数据:

id salesperson sale_amount sale_date
1 Alice 500 2023-01-01
2 Bob 300 2023-01-01
3 Alice 700 2023-01-02
4 Bob 200 2023-01-02
5 Alice 100 2023-01-03
6 Bob 400 2023-01-03

我们应用窗口函数 SUM(sale_amount) OVER (PARTITION BY salesperson ORDER BY sale_date) 来计算累积销售额。执行过程如下:

分区与排序

  • Alice 的分区(已按日期排序):

    id salesperson sale_amount sale_date
    1 Alice 500 2023-01-01
    3 Alice 700 2023-01-02
    5 Alice 100 2023-01-03
  • Bob 的分区(已按日期排序):

    id salesperson sale_amount sale_date
    2 Bob 300 2023-01-01
    4 Bob 200 2023-01-02
    6 Bob 400 2023-01-03

累积计算

  • Alice 的分区累积计算:

    id salesperson sale_amount sale_date cumulative_sales
    1 Alice 500 2023-01-01 500
    3 Alice 700 2023-01-02 500 + 700 = 1200
    5 Alice 100 2023-01-03 1200 + 100 = 1300
  • Bob 的分区累积计算:

    id salesperson sale_amount sale_date cumulative_sales
    2 Bob 300 2023-01-01 300
    4 Bob 200 2023-01-02 300 + 200 = 500
    6 Bob 400 2023-01-03 500 + 400 = 900

结果

最终的查询结果如下:

id salesperson sale_amount sale_date cumulative_sales
1 Alice 500 2023-01-01 500
3 Alice 700 2023-01-02 1200
5 Alice 100 2023-01-03 1300
2 Bob 300 2023-01-01 300
4 Bob 200 2023-01-02 500
6 Bob 400 2023-01-03 900

总结

通过使用窗口函数,SQL 能够在不影响原始行的情况下计算出累积值。这使得它们非常适用于复杂的分析任务,如累积求和、移动平均和排名等。窗口函数的强大之处在于它能够灵活地应用于不同的分组和排序条件,从而在数据分析中提供了强大的支持。

标签:01,OVER,PARTITION,sale,Alice,xx,salesperson,2023,Bob
From: https://www.cnblogs.com/irobotzz/p/18347379

相关文章

  • 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认
    原文链接:https://www.cnblogs.com/wwssgg/p/17984105今天运行项目的时候出现了这个错误....查了一下解决的方法。 具体方案如下: 1、先确认安装IIS的时候有没有装Asp.Net,如果没安装的话,安装上即可。(XTHS:采用这步,就可以了!) 2、IIS采用了更安全的web.config管理机制,默......
  • 【Oracle EBS R12】第三章 Primary Ledger Overview(英文版)
    PrimaryLedgerOverview1.TransactionComponentsTransactiondateTransactionDetailsTransactionAmount2.TransactiondateYearType:PeriodType:3.TransactionDetails4.TransactionAmount5.Summry3Cs4Cs6.PrimaryLedger(PL)1.TransactionComp......
  • Java基于XXLJOB的定时任务实现阶梯式通知方式
    数据库表设计CREATETABLE`tx_order_push_info`(`order_no`varchar(64)DEFAULTNULLCOMMENT'交易单号',`order_id`decimal(11,0)DEFAULTNULLCOMMENT'交易单Id',`push_status`decimal(2,0)DEFAULTNULLCOMMENT'推送状态',`push_count......
  • PlayCover Mac电脑全屏运行ios应用软件 for Mac免费下载
    PlayCover是一款功能强大的软件,主要用于在Mac平台上运行iOS应用程序和Android应用程序(取决于具体版本)。对于iOS应用,PlayCover通过模拟iOS环境,让用户能够在Mac上直接运行iPhone和iPad应用,无需虚拟机或双重启动,支持多点触控、传感器模拟等特性,提供舒适的使用体验。对于Android应用,P......
  • 2023 福建省第三届工业互联网创新大赛CTF Misc-Covertchannel2
    题目:近日,公司Windows服务器被入侵,黑客使用了一个比较隐蔽的信道将机密凭据传输了出去,但是蛛丝马迹还是被流量采集设备捕获了,你能从中找回丢失的flag吗?分析:分析该流量包发现了有一个rsa.key,并且在数据包长度为126和119中发现了,secrets.txt和data.zip,接下来就是写脚本提......
  • html+css 实现hover边框彩色流动
    前言:哈喽,大家好,今天给大家分享html+css绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • redis+xxl-job初步设计点赞功能
    一般情况下点赞业务涉及以下下几个方面:1.我们肯定要知道一个题目被多少人点过赞,还要知道,每个人他点赞了哪些题目。2.点赞的业务特性,频繁。用户一多,时时刻刻都在进行点赞,收藏等等处理,如果说我们采取传统的数据库的模式啊,这个交互量是非常大的,很难去抗住这个并发问题,所以我们......
  • CMPSC Application overview
    Name:Course:CMPSCDueDate:Thursday,August8thby11:59pmTopic:FinalProjectApplicationoverviewYouaregoingtocreateanapplicationthatwillrun4differentprograms.Thisprogramwillbedrivenbyamenuscreen.Theuserwillbeable......
  • Overleaf中插入pdf图片只显示图片路径的解决方式
    最近在用Overleaf写一篇论文,使用IEEE的LaTex模板时发现一个问题,我使用pdfLaTex编译器无法正确显示我插入的pdf图片,网上翻解决方式没有翻到,误打误撞解决了这个问题,问题如下图所示: 即只在图片区域显示路径,不显示图片本身,解决方案是:在右侧设置里找到编译模式,将【快速(draft)】更......
  • 28.x86游戏实战-初探XXX发包
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!本次游戏没法给内容参考于:微尘网络安全工具下载:链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3提取码:6tw3复制这段内容后打开百度网盘手机App,操作更方便哦上一个内容:27.x86游戏实战-线程......