2014-11-21 27 views
1

我正在使用MySQL數據庫來處理PHP應用程序,該數據庫存儲公司已完成的事務列表。PHP/MySQL - 通過合併銷售和採購然後減去計算利潤

這些銷售和採購都保存在同一個表中,標識列中有一個p或s。

我在計算所有的交易,其中salesOrPurchase ='s'並將它們全部加起來,然後對salesOrPurchase ='p'進行相同的計算,然後從我們的銷售中減去我們的購買量以計算出利潤。

東西線沿線的:

SELECT 
SUM(amount) WHERE salesOrPurchase = 's' as SalesTotal, 
SUM(amount) WHERE salesOrPurchase = 'p' as PurchasesTotal, 
(SalesTotal - PurchasesTotal) as Profit 
FROM transactions 

回答

1

如何子查詢?

SELECT SalesTotal, PurchasesTotal, (SalesTotal-PurchasesTotal) as Profit 
FROM (SELECT (SELECT SUM(amount) FROM transactions WHERE salesOrPurchase = 's') as SalesTotal, 
      (SELECT SUM(amount) FROM transactions WHERE salesOrPurchase = 'p') as PurchasesTotal 
    ) t 
+0

這工作完美,謝謝! 如果我想讓它可以按年過濾,我將如何改變這一點在2010年賺取的利潤? 是否有可能爲date ='xx-xxx-10'添加另一個WHERE語句? – Abysinian 2014-11-21 12:51:05

+0

在's'/'p'之後使用AND,然後放上'date ='xx-xxx-10',我會輸入它,但是我在我的iPhone上。讓我知道你是否需要更多的幫助。 – 2014-11-21 14:07:47

+0

得到它使用通配符和從我的PHP採取一些輸入工作。謝謝您的幫助! – Abysinian 2014-11-21 14:39:35

0

你不能在他們的定義相同select使用別名。相反,所有三個使用條件聚合:

SELECT SUM(case when salesOrPurchase = 's' then amount end) as SalesTotal, 
     SUM(case when salesOrPurchase = 'p' then amount end) as PurchasesTotal, 
     SUM(case when salesOrPurchase = 's' then amount 
       when salesOrPurchase = 'p' then - amount 
      end) as Profit 
FROM transactions;