MYSQL左联接后求和不同值

MYSQL左联接后求和不同值,mysql,select,sum,left-join,Mysql,Select,Sum,Left Join,我有这些桌子 /*OrderRows*/ order_id | row_id | article | quantity 1 | 1 | pen | 10 1 | 2 |scissors | 7 2 | 3 | book | 5 3 | 4 | pen | 5 /*Shipments*/ shipment_id | row_id | quantity_

我有这些桌子

/*OrderRows*/

order_id | row_id | article | quantity
    1    |    1   |   pen   |   10
    1    |    2   |scissors |   7
    2    |    3   |  book   |   5 
    3    |    4   |  pen    |   5 

/*Shipments*/

shipment_id | row_id   | quantity_shipped
    1       |     1    |         3
    2       |     1    |         4
    3       |     1    |         3
    4       |     2    |         7
    5       |     3    |         5
    6       |     4    |         5
我需要生成一份报告来检查订单是否已全部发货

我希望使用左连接而不是子查询(只是为了检查:它是否更有效?)

如果我问

SELECT
    OrderRows.order_id,
    sum(OrderRows.quantity) as ordered,
    sum(Shipments.quantity_shipped) as shipped
FROM
    Orders
LEFT JOIN Shipments ON OrderRows.row_id = Shipments.row_id
GROUP BY OrderRows.order_id
我显然明白了

order_id | orderered | shipped
    1    |    27    |   17
    2    |    5     |   5
    3    |    5     |   5
那是因为左连接会将订单数量复制三次 对于订单号=1(因为对于订单号=1,有3批装运)

如何在不使用子查询的情况下获取此信息

order_id | orderered | shipped
    1    |    17    |   17
    2    |    5     |   5
    3    |    5     |   5

如果ordered/quantity是
order\u id
的一个属性,那么只需选择它并
groupby

SELECT
    Orders.order_id,
    Orders.quantity as ordered,
    sum(Shipments.quantity_shipped) as shipped
FROM
    Orders
LEFT JOIN Shipments ON Orders.order_id = Shipments.order_id
GROUP BY Orders.order_id,orders.quantity

如果ordered/quantity是
order\u id
的一个属性,那么只需选择它并
groupby

SELECT
    Orders.order_id,
    Orders.quantity as ordered,
    sum(Shipments.quantity_shipped) as shipped
FROM
    Orders
LEFT JOIN Shipments ON Orders.order_id = Shipments.order_id
GROUP BY Orders.order_id,orders.quantity

哈你的回答是对的,但我的代码太复杂了,这些是订单行,而不仅仅是订单,因此如果我按orders.quantity分组,我会在结果集中获得一个重复的行。我更新了我的问题以显示这一点。抱歉,当您的数据模型错误时,因为同一订单有多行!如果您想坚持知道所有行的数量都相同,只需选择MAX not sum。所有行的数量都不相同,它与该订单上特定物品的数量有关,事实上,对于订单_id=1,有两行的数量=10,这只是一种情况。我编辑它是为了不产生混乱哈!你的回答是对的,但我的代码太复杂了,这些是订单行,而不仅仅是订单,因此如果我按orders.quantity分组,我会在结果集中获得一个重复的行。我更新了我的问题以显示这一点。抱歉,当您的数据模型错误时,因为同一订单有多行!如果您想坚持知道所有行的数量都相同,只需选择MAX not sum。所有行的数量都不相同,它与该订单上特定物品的数量有关,事实上,对于订单_id=1,有两行的数量=10,这只是一种情况。我编辑它是为了不引起混乱