Law*_*Law 4 mysql calculated-columns running-total cumulative-frequency
我一直在Excel办公室工作.我的记录变得太多了,想要使用mysql.i有一个来自db的视图它有"date,stockdelivered,sales"列我想添加另一个计算字段,称为"库存余额".我知道这应该是在数据输入期间在客户端完成的.我有一个脚本,只根据视图和表生成php列表/报告,它没有添加计算字段的选项,所以我想在可能的情况下在mysql中创建一个视图.
在excel中,我曾经如下做过.

我想知道这是否可能在mysql中.

我对我的sql没有太多经验,但我想第一个必须能够选择前一行.colomn4然后将其添加到当前row.colomn2减去当前row.colomn3
如果有另一种方法可以实现相同的输出请建议.
一般来说,SQL并不是真的想要像你想要的那样产生"运行总数".其他RDBMS已经引入了专有扩展来提供分析功能,这些功能可以实现这种计算,但是MySQL缺乏这样的功能.
相反,一个广泛有四种选择.没有特别的顺序:
在循环结果集时,累积应用程序中的运行总计;
改变你的模式以跟踪数据库中的运行总数(特别是在这样的情况下,新数据只被"追加到最后");
分组自我加入:
SELECT a.Sale_Date,
SUM(a.Stock_Delivered) AS Stock_Delivered,
SUM(a.Units_Sold) AS Units_Sold,
SUM(b.Stock_Delivered - b.Units_Sold) AS `Stock Balance`
FROM sales_report a
JOIN sales_report b ON b.Sale_Date <= a.Sale_Date
GROUP BY a.Sale_Date
Run Code Online (Sandbox Code Playgroud)累计用户变量中的运行总计:
SELECT Sale_Date,
Stock_Delivered,
Units_Sold,
@t := @t + Stock_Delivered - Units_Sold AS `Stock Balance`
FROM sales_report, (SELECT @t:=0) init
ORDER BY Sale_Date
Run Code Online (Sandbox Code Playgroud)Eggyal 有四个很好的解决方案。我认为在 MySQL 中进行运行总计的最干净的方法是使用相关子查询——它消除了group by最后的 。所以我会添加到选项列表中:
SELECT sr.Sale_Date, sr.Stock_Delivered, sr.Units_Sold,
(select SUM(sr2.Stock_Delivered) - sum(sr2.Units_Sold)
from sales_report sr2
where sr2.sale_date <= sr.sale_date
) as StockBalance
FROM sales_report sr
ORDER BY Sale_Date
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32677 次 |
| 最近记录: |