如何从 MySQL 中具有累积值的列创建具有增量值的列?
Posted
技术标签:
【中文标题】如何从 MySQL 中具有累积值的列创建具有增量值的列?【英文标题】:How can I create a column with incremented values from a column with cumulated values in 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
有人对此有解决方案吗?
【问题讨论】:
【参考方案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 |
【讨论】:
以上是关于如何从 MySQL 中具有累积值的列创建具有增量值的列?的主要内容,如果未能解决你的问题,请参考以下文章
Python:从数据框字符串列中提取维度数据并为每个列创建具有值的列
如何将具有值的列添加到 Spark Java 中的新数据集?
MySQL Select ID 出现在具有多个特定值的列的不同行上