惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
小众软件
小众软件
腾讯CDC
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
美团技术团队
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
罗磊的独立博客
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements

博客园 - hrx521

微信公众号H5开发踩坑记:为什么POST返回的页面会显示HTML源码 SQL NOT IN 子查询存在 NULL 的经典行为陷阱--NULL 三值逻辑(TRUE / FALSE / UNKNOWN) 我的蝶翼斑马鱼繁殖要领总结 如何从操作系统的角度,理解C#语言的Async Await 异步机制内部状态机的运行原理? C#扩展方法对软件工程构建的促进示例和总结 基于原数据库新创建一个带部分数据做为初始数据的数据库的思路 sql调优记录,不要在join on 条件中使用过多的条件 发布和更新自己的nuget包 Rust的枚举类型Enum Rust语言特色语法记录 Rustup-init.exe安装后执行cargo run 报错:`link.exe` returned an unexpected error的解决办法 FastReport.OpenSource .Net下开源免费报表打印组件 SQL使用Merge在一个语句中完成插入、更新和删除操作 IIS应用程序回收导致应用中Hangfire等后台任务无法正常启动工作的解决方法 Microsoft.AspNetCore.Identity 的使用记录 C# xml文档反序列化记事 债券与债券基金 Linq补充学习 Blazor学习记录_12._IIS部署_组件的引用_HTML元素的引用 Blazor学习记录_11.身份认证与授权 Blazor学习记录_10.C#和JS互操作_访问WEB API Blazor学习记录_9.预呈现_渲染树
SQL用窗口函数做逐行累计的实用用例
hrx521 · 2026-05-09 · via 博客园 - hrx521

--逐行累加小计
--“UNBOUNDED PRECEDING”无界前驱 在 SQL 中指的是窗口函数中的一种特殊值,表示窗口的起始位置是数据集的最开始位置。
select a.id,a._id,a.rq,a.mmsl,a.mmje,b.id,b.slb.price 行金额
,sum(b.sl
b.price) over(order by b.id rows between unbounded preceding and current row) 累计金额
from m_cpjh a join d_cpjh b on a._id=b.mainid
--其中rows between unbounded preceding and current row 是显式写法,可以省略

--按分组小计
--方案1,传统方案,性能最佳。尤其是在大数据量、多字段汇总、关联多个字表时更显优势
select a.id,a._id,a.rq,a.mmsl,a.mmje
,sum(b.slb.price) 按单号分组合计金额
from m_cpjh a join d_cpjh b on a._id=b.mainid
group by a.id,a._id,a.rq,a.mmsl,a.mmje
--方案2:性能差,大数据量不推荐。不新增额外小计行,同一组每一行后面都挂着该组总金额
select a.id,a._id,a.rq,a.mmsl,a.mmje
,sum(b.sl
b.price) over(partition by b.mainid) 按单号分组合计金额
from m_cpjh a join d_cpjh b on a._id=b.mainid
--方案3:ROLLUP 分组小计。适合:按字段分组,每组最后自动多出一行合计
--效果:正常明细行保留,每组末尾自动多出一行:分类小计,最后还会出一个全局总计,只保留「每组小计」,不要全局总计
--最后部分加 HAVING 过滤:
select a.id,a._id,a.rq
,SUM(b.sl*b.price) AS 按单号分组合计金额
from m_cpjh a join d_cpjh b on a._id=b.mainid
GROUP BY a.id,a._id,a.rq WITH ROLLUP
HAVING GROUPING(a.id)=0