3

我一直在做Excel的辦公室工作,我的記錄變得太多了,想用mysql.i有一個從數據庫視圖它有列「日期,stockdelivered,銷售」我想添加另一個稱爲「庫存餘額」的計算字段。 我知道這應該是在數據錄入期間在客戶端完成的。 我有一個腳本,只生成基於視圖和表的PHP列表/報告,它沒有添加計算字段的選項,所以我想如果可能的話在MySQL中查看。Mysql在select語句中的計算

在excel中,我用它來做如下。

enter image description here

我想知道這是否可能在MySQL。

enter image description here

我沒有太多的經驗與我的SQL但我想第一個 必須能夠選擇前row.colomn4 然後將其添加到當前row.colomn2減去當前row.colomn3

如果還有其他方法可以實現同樣的輸出請建議。

回答

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 
+0

感謝Gordon Linoff,它的工作很完美。現在我明白了這是如何工作的。這只是我所擁有的衆多表格中的一種。我也會對其他人做同樣的事情。我也從eggyal那裏得到了一些想法。再次感謝我已經2天了。 – Law 2013-05-01 14:26:19

0
SELECT 
    sales_report.Stock_Delivered, 
    sales_report.Units_Sold, 
    sales_report.Stock_Delivered - sales_report.Units_Sold 
FROM 
    sales_report; 
+1

該OP想積累運行總數,而不是簡單地顯示一天的運動。 – eggyal 2013-05-01 13:31:08

+0

@布拉德感謝您的嘗試,但我認爲,我以前並不清楚,我需要的計算是(「前一天的庫存餘額」+「庫存交付」 - 「單位告訴」) – Law 2013-05-01 13:34:03

+0

Ahh ..sorry'回合 - 我雖然你確實得到了正確的答案,但很開心! – Brad 2013-05-01 14:30:04

6

一般來說,SQL並不是真的打算像您期望的那樣產生「運行總數」。其他RDBMS引入了專有擴展來提供分析函數,以便進行此類計算,但MySQL缺乏這些功能。

相反,廣義上有四種選擇。沒有特定的順序:

  1. 在循環結果集時在應用程序中積累運行總數;

  2. 改變你的模式以跟蹤數據庫中的運行總數(特別是在像這樣的情況下,新數據只被追加到「最後」);

  3. 集團自聯接:

    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 
    
  4. 累積運行總在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 
    
+0

謝謝,這是非常有用的見解,至少現在我有一個想法,正在努力。 – Law 2013-05-01 14:17:59