Mysql
 sql >> база данни >  >> RDS >> Mysql

Изчислете печалбата въз основа на ценообразуването „Първ пристигнал, първи излязъл“.

Добър въпрос. Подходът, който използвам, е да изчисля общите продажби. След това изчислете кумулативните покупки и ги комбинирайте със специална логика, за да получите правилната аритметика за комбинацията:

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

Забележка:Не съм тествал тази заявка, така че може да има синтактични грешки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Копиране на данни от една таблица в друга И добавяне на допълнителни данни

  2. MySQL SET NAMES близо до горната част на дневника на бавните заявки

  3. Обновяване на PHP страница за всяка предварително зададена секунда

  4. Как да разберете кога заявката е изпълнена успешно в PHP PDO?

  5. Ограничете стойността на MySQL тип данни до конкретен диапазон (за предпочитане не ENUM)