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

相关推荐
g***267911 小时前
PostgreSQL 查看数据库及表中数据占用空间大小
数据库·postgresql·oracle
小龙报11 小时前
VS2022调试技巧 + 实战案例
android·服务器·c语言·数据库·c++·windows·visual studio
i***486111 小时前
【MySQL】MySQL库的操作
android·数据库·mysql
翔云12345611 小时前
MySQL offline_mode:安全隔离流量,高效完成数据库维护
数据库·mysql·安全
篮球只打两年半11 小时前
普罗米修斯监控sql(CentOS7)
数据库·sql
007php00711 小时前
nginx面试之负载均衡的实际经历与配置
运维·数据库·mysql·nginx·面试·职场和发展·负载均衡
白茶三许11 小时前
【OpenHarmony】Flutter 本地存储全解析:从键值对到数据库
数据库·flutter·开源·openharmony·gitcode
一 乐11 小时前
购物商城|基于SprinBoot+vue的购物商城系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
意疏11 小时前
openGauss 数据库快速上手评测:从 Docker 安装到SQL 实战
数据库·sql·docker
m0_5981772311 小时前
SQL(一)
数据库·sql