【问题标题】: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】:

      可以使用关联子查询来获取之前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        |
      

      【讨论】:

        猜你喜欢
        • 2018-09-03
        • 2021-07-13
        • 2022-11-16
        • 2022-08-22
        • 1970-01-01
        • 1970-01-01
        • 2019-12-27
        • 1970-01-01
        • 2019-08-15
        相关资源
        最近更新 更多