sql >> Databáze >  >> RDS >> Mysql

Vypočítejte zisk na základě ceny první dovnitř, první ven

Dobrá otázka. Přístup, který volím, je vypočítat celkový prodej. Poté vypočítejte kumulativní nákupy a zkombinujte je se speciální logikou, abyste získali správnou aritmetiku pro kombinaci:

select s.sku,
       (MarginPos - SUM(case when s.totalqty < p.cumeqty - p.qty then p.price * p.qty
                             when s.totalqty between p.cumeqty - p.qty and p.qty
                             then s.price * (s.totalqty - (p.cumeqty - p.qty))
                             else 0
                        end)
       ) as Margin
from (select s.sku, SUM(price*qty) as MarginPos, SUM(qty) as totalqty
      from sales s
     ) s left outer join
     (select p.*,
             (select SUM(p.qty) from purchase p2 where p2.sku = p.sku and p2.sale_id <= p.sale_id
             ) as cumeqty
      from purchase s
     )
     on s.sku = p.sku
group by s.sku, MarginPos

Poznámka:Tento dotaz jsem netestoval, takže může obsahovat chyby syntaxe.



  1. Existuje v MySQL způsob, jak obrátit booleovské pole jedním dotazem?

  2. Analytické funkce LEAD a LAG

  3. Kód chyby:23 Při otevírání souboru dochází prostředky

  4. Najděte maximální hodnotu a zobrazte odpovídající hodnotu z jiného pole na serveru SQL