【数据库】【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函数等。

相关推荐
m0_748554811 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
早日退休!!!2 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
xcLeigh2 小时前
KES数据库性能优化实战
数据库·sql·性能优化·sql优化·数据性能
阿正呀2 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
yoyo_zzm3 小时前
Laravel9.x新特性全解析
数据库·mysql·nginx
2501_901200533 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
m0_495496414 小时前
mysql处理复杂SQL性能_InnoDB优化器与MyISAM差异
jvm·数据库·python
forEverPlume4 小时前
PHP怎么使用Eloquent Attribute Composition属性组合_Laravel通过组合构建复杂属性【方法】
jvm·数据库·python
2301_809204705 小时前
mysql在docker容器中如何部署_利用docker-compose快速启动
jvm·数据库·python
虹科网络安全5 小时前
艾体宝产品|深度解读 Redis 8.4 新增功能:原子化 Slot 迁移(上)
数据库·redis·bootstrap