sql >> Database >  >> RDS >> Mysql

Hoe voorraad en verkoop aftrekken met behulp van mysql-subquery?

Om de gewenste output te bereiken, moet u lopende totalen van productverkopen berekenen. Om zinvolle gegevens te krijgen, moeten de gegevens in sales tafel moet chronologisch worden geordend. U heeft dus ten minste één extra veld nodig om gegevens te sorteren - het maakt niet uit of het een tijdstempel of id is veld. Laten we aannemen dat er een id . is veld in verkooptabel. Dit is een vraag om te krijgen wat je hebt beschreven:

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

Het tweede exemplaar van sales tabel genaamd sales_2 wordt gebruikt om de som van eerdere verkopen te berekenen (sales_2.id<sales.id )

U kunt sales.id uitsluiten uit de select clausule, maar je moet het in group by . houden en order by .



  1. MySQL-zoekopdracht met uft8_general_ci is hoofdlettergevoelig voor FULLTEXT?

  2. selecteer alle kolommen met groeperen op in zoekopdrachten met slaapstandcriteria

  3. Mysql - Hoe twee Json-objecten te vergelijken?

  4. Hulp bij SQL-deelname voor vriendenlijst