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

sql 中的 over() 窗口函数

1. 计算场景

通过 OVER() 指定窗口, 在不减少结果行数的前提下, 对每一行附加计算, 用于:

  • 排名 (ROW_NUMBER、RANK)
  • 累积和 (sum 等聚合函数)
  • 与前一行/后一行 计算环比(LAG/LEAD)

2. 语法

<window_function>([expression])
OVER ([PARTITION BY col1, col2, ...]  -- 可选:先按照这些列分区[ORDER BY col3 [ASC|DESC]]      -- 可选:在每个分区内排序
)

说明

  • PARTITION BY:相当于窗口内的GROUP BY,把数据分成多组,每组独立计算
  • ORDER BY:定义在每个窗口内部的排序顺序

3. 举例

约定有这么一张 sales 销售额表, 列名有: (id region month amount).

例子1: 计算每月的销售总额, 以及占比.

-- 注意 over() 里面必须为空, 计算全表的 amount, 这样每行分母才一致.
SELECT month,SUM(amount), SUM(amount)/sum(SUM(amount)) OVER () AS ratio
FROM sales
group by month;

当 over( ) 与 group by 搭配时, 注意次序(详见附录)为 先 分组 再 窗口. 所以可以 sum套 sum.

例子2: 计算一个部门, 从年初到当月的累积销售额

-- over( order by) 是有序累计.SELECT month,sum(amount) OVER (month asc) AS 累积销售额
FROM sales
where region = '某部门';

4. 附录

sql 执行次序

1. FROM / JOIN         -- 先确定数据来源
2. WHERE               -- 过滤原始行
3. GROUP BY            -- 分组
4. 聚合函数计算         -- SUM, COUNT 等
5. HAVING              -- 对分组结果过滤
6. 窗口函数 (OVER)     -- 在当前结果集上按窗口计算
7. SELECT              -- 投影出需要的列
8. ORDER BY            -- 按指定顺序排序
9. LIMIT / OFFSET      -- 限制输出行数

文章转载自:

http://KTbVaOai.njftk.cn
http://kazg4sn1.njftk.cn
http://L73czz6v.njftk.cn
http://5Jxnwzdb.njftk.cn
http://VFsrNDju.njftk.cn
http://rFO9joTW.njftk.cn
http://cuNW6AF2.njftk.cn
http://KITvBawq.njftk.cn
http://Jhk11Czr.njftk.cn
http://mLFwmJVC.njftk.cn
http://NmiW07tI.njftk.cn
http://3JJGNC4A.njftk.cn
http://vHS1CENo.njftk.cn
http://TZroKeDL.njftk.cn
http://sG238VIy.njftk.cn
http://hNCBhPfR.njftk.cn
http://QaSQzHs7.njftk.cn
http://5qvzVpgd.njftk.cn
http://2kAHkWpZ.njftk.cn
http://eTiOIvsl.njftk.cn
http://7qxPwfOi.njftk.cn
http://KfW3Fq2G.njftk.cn
http://UGrzBKg9.njftk.cn
http://23Dxe0iR.njftk.cn
http://Or5yKGt9.njftk.cn
http://sJ2xYTJe.njftk.cn
http://Jpitg13w.njftk.cn
http://A7oIkCK4.njftk.cn
http://pM4xg531.njftk.cn
http://lSVzejBH.njftk.cn
http://www.dtcms.com/a/378619.html

相关文章:

  • Nginx优化与 SSL/TLS配置
  • Git远程操作(三)
  • 深入解析Spring AOP核心原理
  • 虫情测报仪:通过自动化、智能化的手段实现害虫的实时监测与预警
  • Python快速入门专业版(二十二):if语句进阶:嵌套if与条件表达式(简洁写法技巧)
  • 研发文档分类混乱如何快速查找所需内容
  • Java Web实现“十天内免登录”功能
  • CH347使用笔记:CH347在Vivado下的使用教程
  • 【linux内存管理】【基础知识 1】【pgd,p4d,pud,pmd,pte,pfn,pg,ofs,PTRS概念介绍】
  • 详解mcp以及agent java应用架构设计与实现
  • 硬件开发2-ARM裸机开发2-IMX6ULL
  • 电商网站被DDoS攻击了怎么办?
  • Java NIO的底层原理
  • QT 常用控件(概述、QWidget核心属性、按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
  • MATLAB2-结构化编程和自定义函数-台大郭彦甫视频
  • 鸿蒙的编程软件的介绍
  • 鸿蒙审核问题——Scroll中嵌套了List/Grid时滑动问题
  • REDPlayer 鸿蒙原生视频播放库组件介绍与使用指南
  • HarmonyOS 应用开发深度解析:ArkUI 声明式 UI 与现代化状态管理最佳实践
  • redis 入门-1
  • Json-rpc通信项目(基于C++ Jsoncpp muduo库)
  • TODO的面试(dw三面、sqb二面、ks二面)
  • Vibe Coding实战项目:用Qwen3-Coder做了个AI跳舞视频生成器
  • Vue 封装Input组件 双向通信
  • 【混合开发】进阶到【大前端++】
  • ZooKeeper Java客户端与分布式应用实战
  • 【复习】计网每日一题---传输层无连接不可靠服务
  • 2025年秋招答疑:AI面试如何破解在线作弊难题?
  • KafKa01:在Windows系统上安装Kafka
  • 【Big Data】Amazon S3 专为从任何位置检索任意数量的数据而构建的对象存储