Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment soustraire l'inventaire et la vente à l'aide de la sous-requête mysql ?

Pour obtenir le résultat souhaité, vous devez calculer les totaux cumulés des ventes de produits. Pour obtenir des données significatives, les données dans sales le tableau doit être classé par ordre chronologique. Vous avez donc besoin d'au moins un champ supplémentaire pour trier les données - peu importe s'il s'agit d'un horodatage ou d'un id champ. Supposons qu'il existe un id champ dans la table des ventes. Ceci est une requête pour obtenir ce que vous avez décrit :

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

La deuxième instance de sales table appelée sales_2 est utilisé pour calculer la somme des ventes précédentes (sales_2.id<sales.id )

Vous pouvez exclure sales.id depuis le select clause, mais vous devez la conserver dans group by et order by .