sql >> Databasteknik >  >> RDS >> Mysql

Hur subtraherar man inventering och försäljning med mysql subquery?

För att uppnå önskad produktion måste du beräkna löpande totalsummor för produktförsäljning. För att få meningsfull data, data i sales tabellen måste ordnas kronologiskt. Så du behöver minst ett fält till för att sortera data - det spelar ingen roll om det är en tidsstämpel eller id fält. Låt oss anta att det finns ett id fältet i försäljningstabellen. Det här är en fråga för att 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 andra instansen av sales tabell som heter sales_2 används för att beräkna summan av tidigare försäljningar (sales_2.id<sales.id )

Du kan utesluta sales.id från select sats, men du måste behålla den i group by och order by .



  1. MariaDB JSON_REMOVE() Förklarad

  2. Verktyg för att skriva tabelldata

  3. Använda en Alias-kolumn i where-satsen i Postgresql

  4. Brent Ozar förklarar SQL Server intern och extern fragmentering