2014-03-19 39 views
0

我有兩個表,即廠商和產品Mysql;如果其他的查詢條件和結果添加到一個新的變量

廠商
ID
charges_by(枚舉「訂單」,「產品」)
extra_fee_per_product
fee_per_order

產品展示
成本
MSRP
fee_per_product
VENDOR_ID

我想看看所有那些利潤率小於100和大於50個
公式計算在我的項目利潤率的產品:

If(Vendors.charges_by=='Order') then 
    Vendor Fees = Products.Cost + Vendors.fee_per_order + 
    Vendors.extra_fee_per_product 
ElSE IF(Vendors.charges_by=='Product') then Vendor Fees = Products.Cost + 
    Vendors.fee_per_product + Vendors.extra_fee_per_product 

Gross Profit = Products.msrp - Vendor Fees 

現在我們計算總利潤=

Margin = (Gross Profit/MSRP) * 100 

我在列表中實現了搜索,我想在一個查詢中看到這些記錄MySQL

回答

0

在這裏你去:

SELECT prod_id, (((msrp + 0.0) - (
    CASE 
    WHEN v.charges_by = 'Order' 
    THEN p.cost + v.fee_per_order + v.extra_fee_per_product 
    WHEN v.charges_by = 'Product' 
    THEN p.cost + p.fee_per_product + v.extra_fee_per_product 
    END 
))/msrp) * 100 AS Margin 
FROM Vendors v 
INNER JOIN Products p 
ON v.id = p.vendor_id 
HAVING Margin BETWEEN 10 AND 100 

工作小提琴http://sqlfiddle.com/#!2/ddbaf2/8

關鍵部分這裏是msrp + 0.0,它已經做了處理計算作爲一個浮點值,而不是數量。

0

這是你要找的嗎?

SELECT (msrp - if(Vendors.charges_by=='Order',Products.Cost + Vendors.fee_per_order + 
      Vendors.extra_fee_per_product,Products.Cost + 
      Vendors.fee_per_product + Vendors.extra_fee_per_product)/ msrp)*100 as `Margin` 
    FROM Vendors 
    INNER JOIN Prodcuts ON Vendors.id = Prodcuts.vendor_id 
0
select t1.cost, t1.msrp, t1.fee_per_product, t1.vendor_id from 
((select (((p.msrp-(p.cost+v.fee_per_order+v.extra_fee_per_product))/p.msrp)*100) as margin 
p.cost as cost, p.msrp as msrp, p.fee_per_product as fee_per_product, p.vendor_id as vendor_id 
from products p inner join vendors v 
on(v.id = p.vendor_id) 
where v.charges_by in ['order', 'product']) as t1) 
where t1.margin < 100 and t1.margin > 50; 

嘗試......好運!