-
认识一下SQL的窗口函数
最近在弄一个报表,要求每行的最后一列字段显示余额金额,就是上一行余额金额加上当前行的余额
一开始我都是在程序里面处理,这次需要用Sql写出来,一下犯难了。
同事介绍到有个窗口函数可以实现,我用了好多年的SqlServer,都不知有这个东西。
记录一下,免得以后忘记了
以这个表为例子
--不分组统计 select *, sum(score) over(order by score desc,id) as '分数余额', sum(score) over() as '分数总计', rank() over(order by score desc ) '排名', dense_rank() over(order by score desc) as '排名2', row_number() over(order by score desc) as '行号' from Test01 order by score desc --分组统计 select *, sum(score) over(partition by class order by score desc,id) as '所在班级分数余额', sum(score) over(partition by class) as '所在班级分数总计', rank() over(partition by class order by score desc ) '所在班级排名', dense_rank() over(partition by class order by score desc) as '所在班级排名2', row_number() over(partition by class order by score desc) as '所在班级行号' from Test01 order by class, score desc
如果如下图所示
窗口函数大体可以分成两种
一种是聚合统计类型,partition by跟order by都是可选的,像sum、avg、count、max、min
一种是排行类型,必须有order by,partition by可选,像rank、dense_rank、row_number
Partition By 是以哪个字段进行分组,没有就是无分组,或者把全部数据当成一组
Order By 如果加上这个参数,就会以哪个字段进行排序,并统计当前行跟记录之上的数据进行计算,如果没有,就是统计全部行
出处:https://www.cnblogs.com/caijt/p/17135937.html
最新更新
谷歌、微软、Meta?谁才是 Python 最大的金
VB.NET编程调用讯雷下载文件
Objective-C语法之代码块(block)的使用
URL Encode
python爬虫学习
python爬虫学习——列表
go语言写http踩得坑
【Python】爬虫笔记-从PyMySQL到DBUtils
【Python】爬虫笔记-开源代理池haipproxy使用
Python规范:提高可读性
SQL语句中 left join 后用 on 还是 where,区别
认识一下SQL的窗口函数
DSC:数仓SQL脚本迁移的神奇工具
分布式数据库架构路线大揭秘
SqlServer 高并发的情况下,如何利用锁保证
MS SQL Server 删除重复行数据
SQL server分页的三种方法
GaussDB(DWS)运维:导致SQL执行不下推的改写
SQL Server如何找出视图依赖的对象和视图嵌
【数仓运维实践】关于GaussDB(DWS)单SQL磁盘
JavaScript 中 Object,Map,Set 及数组遍历方法
微信小程序的全局弹窗以及全局实例
理解JS函数之call,apply,bind
解决未知的服务器标记“asp:ListView”。
css样式显示省略号
浅谈JS词法环境
js对象的理解
原型和原型链的深入浅出
JavaScript实现数组对象去重
关于 NodeJs 处理超长字符串问题的分析