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

Jak odečíst zásoby a prodej pomocí poddotazu mysql?

Chcete-li dosáhnout požadovaného výstupu, musíte vypočítat průběžné součty prodeje produktů. Chcete-li získat smysluplná data, použijte data v sales tabulku je nutné seřadit chronologicky. K řazení dat tedy potřebujete alespoň jedno další pole – nezáleží na tom, zda se jedná o časové razítko nebo id pole. Předpokládejme, že existuje id pole v prodejní tabulce. Toto je dotaz k získání toho, co jste popsali:

SELECT 
    sales.id,
    sales.store_id,
    sales.product_id,
    inventories.quantity-IFNULL(SUM(sales_2.quantity), 0) as inventory,
    sales.quantity as sales,
    inventories.quantity-IFNULL(SUM(sales_2.quantity), 0) - sales.quantity as remaining
FROM
    sales
        INNER JOIN
    inventories ON inventories.store_id = sales.store_id
        AND inventories.product_id = sales.product_id
        LEFT JOIN
    sales AS sales_2 ON sales_2.store_id = sales.store_id
        AND sales_2.product_id = sales.product_id
        AND sales_2.id < sales.id
GROUP BY sales.id , sales.store_id , sales.product_id
ORDER BY sales.id

Druhá instance sales tabulka s názvem sales_2 se používá k výpočtu součtu dřívějších prodejů (sales_2.id<sales.id )

Můžete vyloučit sales.id z select klauzuli, ale musíte ji ponechat v group by a order by .



  1. prohlášení o přípravě ovladače golang sql

  2. Struktura tabulek databáze SQL podobná polymorfii

  3. Kdy bych měl používat komprimovaný protokol MySQL?

  4. Codeigniter - Přístup k modelům a databázi na směrování