如何从mysql中具有累积值的列创建具有递增值的列?

dldeef67  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(411)

表1包含一列累积值(所有正整数):

id ValuesCum
1  5
2  8
3  20

我想写一个语句,返回一个额外的列,每行的值递增。输出应该是这样的:

id ValuesCum ValuesInc
1  5         (5)
2  8         3
3  20        12

有人有解决办法吗?

z0qdvdin

z0qdvdin1#

如果您运行的是mysql 8.0,那么可以使用window函数 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
sycxhyv7

sycxhyv72#

可以使用相关子查询来获取 ValuesCum 以前的 id :

select t.*,
  t.ValuesCum - 
  coalesce((select ValuesCum from tablename where id < t.id order by id desc limit 1), 0) ValuesInc
from tablename t

请看演示。
结果:

| id  | ValuesCum | ValuesInc |
| --- | --------- | --------- |
| 1   | 5         | 5         |
| 2   | 8         | 3         |
| 3   | 20        | 12        |

相关问题