sql查询迭代行并进行计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询迭代行并进行计算相关的知识,希望对你有一定的参考价值。
我正在使用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列的新表。我之后的步骤遇到了麻烦。
答案
您可以使用相关子查询进行计算:
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
以上是关于sql查询迭代行并进行计算的主要内容,如果未能解决你的问题,请参考以下文章