比较两个表,其中一个表被分组

时间:2011-12-20 22:52:58

标签: php mysql

我有两张表需要比较:

TABLE 'orders'
customer|product |colour|order_quantity
Germany |product1|black |100
Germany |product1|red   |200
Germany |product3|yellow|150
UK      |product1|black |450
UK      |product2|green |350
UK      |product5|grey  |100
Italy   |product1|grey  |200
Italy   |product2|black |300
Italy   |product3|yellow|400
Italy   |product3|black |800
Italy   |product4|blue  |250
Italy   |product5|grey  |370

TABLE 'inventory'
product |colour|inventory_quantity
product1|black |830
product1|red   |250
product1|grey  |600
product1|mango |120
product2|green |50
product2|black |350
product3|yellow|900
product3|black |900
product4|blue  |210
product4|black |50
product4|green |25
product5|grey  |700


Output wanted:
product |colour|order_quantity|inventory_quantity|difference
product1|black |550           |830               |180
product1|red   |200           |250               |50
product1|grey  |200           |600               |400
product1|mango |0             |120               |120
product2|green |350           |50                |-300
product2|black |300           |350               |50
product3|yellow|550           |900               |350
product3|black |800           |900               |100
product4|blue  |250           |210               |-40
product4|black |0             |50                |50
product4|green |0             |25                |25
product5|grey  |370           |700               |330

但是,目前我得到的库存数量倍数给我一个不正确的差异。如何比较“订单”(按产品分组)和“库存”(未分组)中的数量?

谢谢, 德里克

1 个答案:

答案 0 :(得分:0)

这是一个选项

Select product, colour, order_Quantity, 
  Inventory_Quantity, Inventory_Quantity-Order_Quantity as difference
FROM ORDERS I
FULL OUTER 
(SELECT Sum(Order_Quantity), product, Colour 
 FROM Inventory 
 GROUP BY product, Colour) as O
ON O.Product=I.Product
and O.Colour = I.Colour

第二个选项:

Select product, colour, sum(order_Quantity), max(Inventory_Quantity), sum(order_Quantity)-max(inventory_Quantity)
FROM Inventory I
FULL OUTER JOIN O 
ON I.Product=O.Product
 and O.Colour = I.Colour
GROUP BY product, colour

选项3

    SELECT product, colour, OQ as Order_Quantity, Inventory_Quantity, Inventory_Quantity-OQ as Difference
    Select product, colour, sum(order_Quantity) as OQ , Inventory_Quantity
    FROM Inventory I
    FULL OUTER JOIN O 
    ON I.Product=O.Product
     and O.Colour = I.Colour
GROUP BY product, colour)

使用完全外部联接,因为订单或库存可能为空并且怀疑您仍然需要差异。