sql查询遍历行并进行计算

时间:2019-03-14 11:55:17

标签: sql sqlite iteration

我正在使用SQLITE。在过去的两个小时里,我一直在寻找答案,但没有成功。我当前正在处理的数据如下所示(我正在简化):

Sales_period  Sales_Qty  Sales_Profit
0001                15       300
0002                20       500
0003                10       200

我希望从此表中扣除以下内容: 名为Sales_Index的新列是:Sales_Profit / Sales_Qty 另一个名为Sales_Goal的新列是给定销售期间内先前Sales_Index的平均值。因此,例如,针对Sales_Period 0003的Sales_Goal将为22.5。最后,我想返回一个布尔值,该值确定在给定期间内是否满足Sales_Goal。所以我想要的输出看起来像这样:

Sales_period  Sales_Qty  Sales_Profit  Sales_Index  Sales_Goal Goal_Met
0001                15       300           20            -         - 
0002                20       500           25            20        Y
0003                10       200           20            22.5      N

有没有办法做到这一点?任何帮助表示赞赏。

编辑:我可以创建一个包含Sales_Index列的新表。我在那之后的步骤遇到了麻烦。

1 个答案:

答案 0 :(得分:1)

您可以使用相关子查询进行计算:

with t as (
      select t.*, (sales_profit / sales_qty) as sales_index 
      from mytable t
     )
select t.*,
       (select avg(t2.sales_index)
        from t t2
        where t2.sales_period < t.sales_period
       ) as sales_goal
from t;

在最新版本的SQLite中,您可以使用窗口函数:

select t.*, (sales_profit / sales_qty) as sales_index,
       avg(sales_profit / sales_qty) over (order by sales_period rows between unbounded preceding and 1 preceding) as sales_goal
from mytable t