sql >> Database teknologi >  >> RDS >> Mysql

Hvordan trækker man lager og salg fra ved hjælp af mysql underforespørgsel?

For at opnå det ønskede output skal du beregne løbende totaler af produktsalg. For at få meningsfulde data, dataene i sales tabellen skal ordnes kronologisk. Så du har brug for mindst et felt mere til at sortere data - det er lige meget om det er et tidsstempel eller id Mark. Lad os antage, at der er et id felt i salgstabellen. Dette er en forespørgsel for at få det, du beskrev:

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

Den anden forekomst af sales tabel kaldet sales_2 bruges til at beregne summen af ​​tidligere salg (sales_2.id<sales.id )

Du kan ekskludere sales.id fra select klausul, men du skal beholde den i group by og order by .



  1. Hvilken tilgang er hurtigere til at få alle POI'er fra MySQL/MariaDB med PHP/Laravel

  2. PostgreSQL fejl ved forsøg på at oprette en udvidelse

  3. Forskelle mellem MySQL og SQL Server

  4. Opdater tabel med SUM fra en anden tabel