[英]subtract two different sum of column from two different table in select query
[英]subtract from two different table
我有3個表“產品列表,銷售,退貨”表,因此,例如,我有3個銷售和2個退貨,如下所示。
這是產品列表中的數據
id | pcode | pname | pdesc |
1 | 222 | 33uf | 10v |
這是來自銷售的ff數據
id | pcode | total | profit
1 | 222 | 200 | 10
2 | 222 | 100 | 10
3 | 222 | 200 | 10
這是返回的ff數據
id | pcode | total | lose
3 | 222 | 200 | 10
4 | 222 | 100 | 10
我的問題是這個 。 我想選擇產品列表數據, 總結銷售“總”和“利”的價值,總結了“總”,並從返回“丟失”的價值。 然后減去我的兩個表以獲得結果。 預期結果必須是這樣的。
id | pcode | pname | pdesc | total | profit |
1 | 222 | 33uf | 10v | 200 | 10 |
我有這個ff代碼,但是我不能從銷售中減去“總計”,從收益中減去“總計”,從銷售中減去“利潤”,從收益中減去“虧損”。
$result = mysql_query("SELECT
productlist.*,
SUM(sales.total)-SUM(return.total) as total,
SUM(sales.profit)-SUM(return.lose) as profit
FROM productlist
LEFT JOIN sales ON sales.pcode = productlist.pcode AND return ON return.pcode = productlist.pcode
GROUP BY pcode
ORDER BY total ASC");
您似乎正在嘗試使用AND
將兩個表連接起來,這不太正確;)
嘗試這個:
...
LEFT JOIN `sales` USING (`pcode`)
LEFT JOIN `return` USING (`pcode`)
...
我不確定這是否可行,它可能會抱怨column `pcode` is ambiguous
。 如果發生這種情況,請嘗試以下方法:
...
LEFT JOIN `sales` ON `sales`.`pcode` = `productlist`.`pcode`
LEFT JOIN `return` ON `return`.`pcode` = `productlist`.`pcode`
...
您的查詢結構不會返回正確的結果。 無論您如何固定語法,都將在給定產品的銷售和退貨之間獲得笛卡爾產品。
一種解決方法是在聯接之前進行聚合:
SELECT pl.*,
(coalesce(s.total, 0) - coalesce(r.total, 0)) as total,
(coalesce(s.profit, 0) - coalesce(r.lose, 0)) as profit
FROM productlist pl left join
(select pcode, sum(total) as total, sum(profit) as profit
from sales
group by pcode
)
on s.pcode = pl.pcode left join
(select pcode, sum(total) as total
from return
group by pcode
) r
on r.pcode = pl.pcode
ORDER BY total ASC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.