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

推荐订阅源

N
Netflix TechBlog - Medium
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
雷峰网
雷峰网
宝玉的分享
宝玉的分享
IT之家
IT之家
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园 - 叶小钗
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
美团技术团队
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
L
LangChain Blog
U
Unit 42
有赞技术团队
有赞技术团队
博客园_首页

博客园 - 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