【问题标题】:How can I create a column with incremented values from a column with cumulated values in MySQL?如何从 MySQL 中具有累积值的列创建具有增量值的列?
【发布时间】:2020-05-31 15:02:23
【问题描述】:
Table1 包含一列累积值(所有正整数):
id ValuesCum
1 5
2 8
3 20
我想编写一个语句,该语句返回一个额外的列,其中每行的递增值。输出应该是这样的:
id ValuesCum ValuesInc
1 5 (5)
2 8 3
3 20 12
有人对此有解决方案吗?
【问题讨论】:
标签:
mysql
sql
database
select
window-functions
【解决方案1】:
如果你运行的是 MySQL 8.0,你可以使用窗口函数 lag() 来实现:
select
t.*,
ValuesCum - lag(ValuesCum, 1, 0) over(order by id) ValuesInc
from mytable t
在早期版本中,另一种选择是相关子查询:
select
t.*,
ValuesCum - (
select coalesce(max(t1.ValuesCum), 0)
from mytable t1
where t1.id < t.id
) ValuesInc
from mytable t
【解决方案2】:
可以使用关联子查询来获取之前id的ValuesCum的值:
select t.*,
t.ValuesCum -
coalesce((select ValuesCum from tablename where id < t.id order by id desc limit 1), 0) ValuesInc
from tablename t
请参阅demo。
结果:
| id | ValuesCum | ValuesInc |
| --- | --------- | --------- |
| 1 | 5 | 5 |
| 2 | 8 | 3 |
| 3 | 20 | 12 |