Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Oblicz zysk na podstawie cen „pierwsze weszło, pierwsze wyszło”

Dobre pytanie. Podejście, które obieram, polega na obliczeniu całkowitej sprzedaży. Następnie oblicz skumulowane zakupy i połącz je ze specjalną logiką, aby uzyskać właściwą arytmetykę dla kombinacji:

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

Uwaga:nie testowałem tego zapytania, więc może zawierać błędy składni.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JOIN Problem wydajności MySQL

  2. Jak działa funkcja REGEXP_SUBSTR() w MySQL

  3. Jak ustawić parametry ORDER BY za pomocą przygotowanej instrukcji PDO?

  4. ColdFusion Parametryzacja zapytania

  5. Czy dynamiczne zapytania mysql z kodem ucieczki sql są tak samo bezpieczne, jak przygotowane instrukcje?