Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie subtrahiert man Inventar und Verkauf mit der MySQL-Unterabfrage?

Um die gewünschte Leistung zu erzielen, müssen Sie die laufenden Summen der Produktverkäufe berechnen. Um aussagekräftige Daten zu erhalten, die Daten in sales Tabelle muss chronologisch geordnet werden. Sie benötigen also mindestens ein weiteres Feld, um Daten zu sortieren - es spielt keine Rolle, ob es sich um einen Zeitstempel oder id handelt aufstellen. Nehmen wir an, es gibt eine id Feld in der Verkaufstabelle. Dies ist eine Abfrage, um das zu erhalten, was Sie beschrieben haben:

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

Die zweite Instanz von sales Tabelle namens sales_2 wird verwendet, um die Summe früherer Verkäufe zu berechnen (sales_2.id<sales.id )

Sie können sales.id ausschließen aus der select -Klausel, aber Sie müssen sie in group by behalten und order by .