iT邦幫忙

0

請教各位高手 SQL語法 求毛利及毛利率

想請教下各位高手 MySql 問題
https://ithelp.ithome.com.tw/upload/images/20200716/201278172Bau0RB111.png

欄位stock_type:

in: 進貨
in_return: 進貨後退貨 (計算時total欄位要轉為負值)
out: 銷貨
out_return: 銷貨後退貨(計算時total欄位要轉為負值)

select
sum( IF(stock_type = 'out_return', -1 * amount, amount)) as out_amount_total,
sum( IF(stock_type = 'out_return', -1 * total, total)) as out_price_total 
from stock_items_copy
where stock_type in ('out', 'out_return') 
group by product_id 
order by out_price_total desc 

目前這樣的語法可以求出產品的
銷售總數量 out_amount_total
銷售總額 out_price_total

想請問各位高手
要如何在同個SQL語法中 使用in及in_return欄位 求得 毛利 和 毛利率呢?

毛利 = 銷貨收入 - 進貨成本
毛利率 = (銷貨收入-進貨成本)/銷貨收入 x 100%

銷貨收入: out_price_total
進貨成本: (in_price_total / in_amount_total) * out_amount_total

隨文附上測試的資料
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=1c79f5168bebbac3cf256829250b856d

感謝!!

看更多先前的討論...收起先前的討論...
你把你要計算的 毛利, 毛利率, 先把欄位,計算式, 表達出來. 這樣不是更好.
kevin0523 iT邦新手 5 級 ‧ 2020-07-16 16:46:45 檢舉
好的 馬上補上
Zed_Yang iT邦新手 3 級 ‧ 2020-07-16 17:03:32 檢舉
通靈一下
(售價-進貨價) (amount-price) x (銷貨-銷貨退貨)(out-out_return) = 總利潤
感覺這是數學題。不是mysql
kevin0523 iT邦新手 5 級 ‧ 2020-07-16 17:33:18 檢舉
已補上 計算式
其實你自己寫的出來. 你先自己寫試試看,寫錯了也無所謂.

1 個回答

1
REX
iT邦新手 5 級 ‧ 2020-07-16 23:45:08
最佳解答

加上CTE的語法,湊出進出貨金額的欄位SQL累贅了點
主要要看計算式有沒有寫對
參考看看

with cte AS (select  si.product_id,
sum(IF(stock_type='in',amount,-1*amount)) as in_price_amount ,
sum(IF(stock_type='in',total,-1*total)) as in_price_total ,
b.out_amount_total,
b.out_price_total
from stock_items as si
inner join
 (select
 product_id,
 sum( IF(stock_type = 'out_return', -1 * amount, amount)) as    out_amount_total,
 sum( IF(stock_type = 'out_return', -1 * total, total)) as out_price_total 
 from stock_items 
 where stock_type in ('out', 'out_return') 
 group by product_id ) b
on si.product_id=b.product_id
where stock_type in ('in','in_return')
group by  si.product_id
)
select 
c.product_id,
convert(c.out_price_total-((c.in_price_total/c.in_price_amount)*c.out_amount_total),decimal(16,2)) as '毛利',
convert((c.out_price_total-((c.in_price_total/c.in_price_amount)*c.out_amount_total))/c.out_price_total*100,decimal(16,2)) as '毛利率%'
from cte c 

https://ithelp.ithome.com.tw/upload/images/20200716/201108589lNojw70F7.png
SQL結果

kevin0523 iT邦新手 5 級 ‧ 2020-07-17 03:01:16 檢舉

小弟已跪!超級感謝R大的解答

我要發表回答

立即登入回答