Mysql;将查询中的if-else条件和结果添加到新变量

Mysql;将查询中的if-else条件和结果添加到新变量,mysql,zend-db,Mysql,Zend Db,我有两个表,即供应商和产品 供应商: 身份证件 按“订单”和“产品”枚举的费用 每种产品的额外费用 每份订单的费用 产品切割: 费用 msrp 每种产品的费用 供应商id 我想看看利润率小于100和大于50的所有产品 我的项目中计算利润的公式为: If(Vendors.charges_by=='Order') then Vendor Fees = Products.Cost + Vendors.fee_per_order + Vendors.extra_fee_per_produc

我有两个表,即供应商和产品

供应商: 身份证件 按“订单”和“产品”枚举的费用 每种产品的额外费用 每份订单的费用

产品切割: 费用 msrp 每种产品的费用 供应商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的一个查询中看到这些记录,你在找这个吗

   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
试试这个……祝你好运

给你:

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
工作小提琴:

这里的关键部分是msrp+0.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