【数据库】【sql】如何用SQL实现跨行计算

【背景】

这里的跨行计算不是指整体聚合类的函数比如SUM等的功能,而是指递归算法。

比如我接到有需求,有一个结果字段需要是目前所有行该字段的和,这是属于递归类的算法,SQL中如何实现呢?

【方法】

可以使用窗口函数,比如:

sql 复制代码
SELECT
  sales_date,
  sales_amount,
  LAG(sales_amount) OVER (ORDER BY sales_date) AS prev_sales_amount
FROM
  sales_data;

这里面的LAG代表前一行的值,顺序由Order By指定。这里是直接获得了上一行的值,如果再和本行进行计算,就可以实现各类递归算法。

除了LAG,通用SQL中还有LEAD,用法差不多,只不过代表下一行的值。

【注意】

不同的数据库,关键词和语法会有所变化,但是大差不差,心法是差不多的。

比如PostgreSQL还有FIRST_VALUE函数等。

相关推荐
大黄说说2 分钟前
数据库事务的ACID特性:从理论到实现的深度解析
数据库·oracle
m0_752035635 分钟前
ROW_NUMBER() OVER() 窗口函数详解
大数据·数据库
大江东去浪淘尽千古风流人物5 分钟前
【Basalt】 VIO(sqrt_keypoint_vio)主流程measure函数梳理
数据库·人工智能·python·机器学习·oracle
空空kkk7 分钟前
MySQL 主从同步
android·数据库·mysql
jnrjian13 分钟前
RAC archivelog 在共享盘下就可以在一个node进行备份
数据库·sql
瑶山16 分钟前
SpringBoot + MongoDB 5分钟快速集成:从0到1实操指南
java·数据库·spring boot·后端·mongodb
linux修理工22 分钟前
Claude API 密钥更换方法
java·数据库·mysql
chushiyunen34 分钟前
langchain的流式事件监听astream_event()、todo运行机制
java·数据库·langchain
羊小猪~~1 小时前
【QT】-- QT操作数据库
数据库·qt·oracle
皙然1 小时前
Redis核心理论:数据删除与淘汰策略详解(从原理到实战)
数据库·redis·缓存