我一直在Excel办公室工作。我的记录变得太多了,想要使用mysql.i有一个来自db的视图它有“date,stockdelivered,sales”列我想添加另一个计算字段被称为“库存余额”。 我知道这应该是在数据输入期间在客户端完成的。 我有一个脚本只根据视图和表生成php列表/报告,它没有添加计算字段的选项,所以我想在可能的情况下在mysql中创建一个视图。
在excel中,我曾经这样做过。
我想知道这是否可以在mysql中使用。
我对我的sql没有太多经验,但我想先了 一个人必须能够选择前一行.colomn4 然后将它添加到当前row.colomn2减去当前row.colomn3
如果有另一种方法可以实现相同的输出,请建议。
答案 0 :(得分:7)
一般来说,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
在user variable中累计总计:
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
答案 1 :(得分:3)
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
答案 2 :(得分:0)
SELECT
sales_report.Stock_Delivered,
sales_report.Units_Sold,
sales_report.Stock_Delivered - sales_report.Units_Sold
FROM
sales_report;