如何从 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】:

可以使用关联子查询来获取之前idValuesCum的值:

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:从数据框字符串列中提取维度数据并为每个列创建具有值的列

如何将具有自动递增值的列添加到 mySql 数据库的表中?

如何将具有值的列添加到 Spark Java 中的新数据集?

MySQL Select ID 出现在具有多个特定值的列的不同行上

mysql JSON_SET 无法插入具有 NULL 值的列(5.7+)

Pyspark - 如何拆分具有 Datetime 类型的结构值的列?