SQL计算每日累计消费额 自关联JOIN比较运算符问题求解
SQL累计消费额计算解决方案
首选方案:窗口函数法(适配主流SQL引擎,MySQL8.0+、PostgreSQL、Hive等均支持)
这是计算累计值最简洁高效的方案,直接使用窗口聚合函数即可:
SELECT Date, SUM(spend) OVER (ORDER BY Date ASC) AS spent FROM table_1;
如果需要直接生成目标表table_2,修改为如下语句:
CREATE TABLE table_2 AS SELECT Date, SUM(spend) OVER (ORDER BY Date ASC) AS spent FROM table_1;
逻辑说明:OVER(ORDER BY Date ASC)指定窗口按日期升序排列,每次求和会包含当前行及之前所有行的spend值,刚好符合截止当日累计的需求
自关联方案修正(适配不支持窗口函数的低版本SQL引擎)
你之前关联逻辑正确但缺少分组聚合步骤,修正后的写法如下:
SELECT b.Date, SUM(a.spend) AS spent FROM table_1 a LEFT JOIN table_1 b ON a.Date <= b.Date GROUP BY b.Date ORDER BY b.Date ASC;
逻辑说明:关联后每个b.Date会对应所有小于等于它的a.Date的spend记录,分组后对a.spend求和即可得到对应日期的累计消费额
两种方案执行后都会得到你预期的结果:
| Date | spent |
|---|---|
| 10月16日 | 50 |
| 10月17日 | 110 |
| 10月18日 | 160 |
| 10月19日 | 200 |
| 10月20日 | 250 |
内容的提问来源于stack exchange,提问作者user3429999
相关产品推荐
相关产品推荐

