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查询迭代行并进行计算的主要内容,如果未能解决你的问题,请参考以下文章

熊猫迭代行然后中断直到条件

如何从流中读取 CSV 文件并在写入时处理每一行?

小程序中读取腾讯文档的表格数据

Microsoft SQL Server 代码片段收集

PyQt4 - QTableView - 如何循环 QTableView

springmvc 分页查询的简单实现