select语句中的mysql计算

Posted

技术标签:

【中文标题】select语句中的mysql计算【英文标题】:Mysql calculation in select statement 【发布时间】:2013-04-25 11:38:51 【问题描述】:

我一直在 Excel 中做我的办公室工作。我的记录变得太多,想使用 mysql。我从 db 有一个视图,它有列“日期、库存交付、销售”我想添加另一个计算字段称为“库存余额”。 我知道这应该在数据输入期间在客户端完成。 我有一个仅基于视图和表格生成 php 列表/报告的脚本,它没有添加计算字段的选项,所以如果可能的话,我想在 mysql 中创建一个视图。

在excel中我以前是这样做的。

我想知道这在 mysql 中是否可行。

我对我的 sql 没有太多经验,但我先想象一下 必须能够选择上一行。colomn4 然后将其添加到当前 row.colomn2 减去当前 row.colomn3

如果有其他方法可以实现相同的输出,请提出建议。

【问题讨论】:

【参考方案1】:

一般来说,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
    

【讨论】:

谢谢,这是非常有用的见解,至少现在我有一个想法,正在努力。【参考方案2】:

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

【讨论】:

谢谢,Gordon Linoff 它运行良好。我现在明白它是如何工作的了。这只是我拥有的众多桌子之一的视图。我会对其他人做同样的事情。我也从 eggyal 那里得到了一些想法。再次感谢我已经在这方面工作了 2 天。【参考方案3】:
SELECT
  sales_report.Stock_Delivered,
  sales_report.Units_Sold,
  sales_report.Stock_Delivered - sales_report.Units_Sold
FROM
  sales_report;

【讨论】:

OP想要累积一个累计,而不是简单地显示当天的运动。 @Brad 感谢您的尝试,但我认为,我之前并不清楚,我需要的计算是(“前一天库存余额”+“库存交付”-“单位告知”) 啊……抱歉,不过,我很高兴你得到了正确的答案! 虽然代码很受欢迎,但它应该始终有一个附带的解释。这不必很长,但在意料之中。

以上是关于select语句中的mysql计算的主要内容,如果未能解决你的问题,请参考以下文章

mysql实现经纬度计算两个坐标之间的距离sql语句

SQL语句中的日期计算

SQL初级SQL简介语法SELECT语句SELECT DISTINCT语句

SQL初级SQL简介语法SELECT语句SELECT DISTINCT语句

mysql10 select语句详解

使用 SQL Select 语句计算空值