sql查询迭代行并进行计算

问题描述 投票:0回答:1

我正在使用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列的新表。我之后的步骤遇到了麻烦。

sql sqlite iteration
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.