我想在cart_items
表中获得有序的数量,并在shipping_table
中获得运输的数量。问题是,一些skus
尚未发货,我可以A)只拉动物品或B)没有正确的总运输数量。
样本数据
`shipping_table`
id | invoice | sku | qty | order_id
99 | 104 | 15628 | 1 | 9313
98 | 104 | 34929 | 2 | 9313
97 | 103 | 34929 | 1 | 9313
96 | 102 | 15628 | 87 | 9999
95 | 101 | 34929 | 32 | 9999
94 | 100 | 35870 | 6 | 9999
`cart_items`
id | cart_id | sku | qty
64903 | 4935153 | 15628 | 1
65108 | 4935153 | 34929 | 4
65109 | 4935153 | 35870 | 4
在这个结果中我们应该看到sku 35870没有发货任何物品,15628已经发货,而sku 34929只发运了3件物品。
预期结果
sku | total_qty | total_shipped_qty
15628 | 1 | 1
34929 | 4 | 3
35870 | 4 | NULL
错误的结果A.
这个很接近,但是因为我在order_id
上查询,这只是在一张桌子上,它没有为sku 35870拉total_qty
,因为它还没有在shipping_table
(它根本没有发货)。
SELECT
CT.sku,
MT.`qty` as total_qty,
SUM(CT.`qty`) as total_shipped_qty
FROM `shipping_table` CT
LEFT JOIN
`cart_items` MT ON MT.sku = CT.sku
WHERE MT.`cart_id` = '4935153' AND CT.`order_id` = '9313'
GROUP BY MT.sku
sku | total_qty | total_shipped_qty
15628 | 1 | 1
34929 | 4 | 3
结果错误B.
这里有一些接近,但它是不正确的total_shipped_qty
值,因为它正在查看整个shipping_table
中的总计。这个结果看起来总结了shipping_table
的整个qtys。
SELECT
CT.sku,
MT.`qty` as total_qty,
SUM(CT.`qty`) as total_shipped_qty
FROM `shipping_table` CT
LEFT JOIN
`cart_items` MT ON MT.sku = CT.sku
WHERE MT.`cart_id` = '4935153'
GROUP BY MT.sku
sku | total_qty | total_shipped_qty
15628 | 1 | 88
34929 | 4 | 35
35870 | 4 | 6
使用标量子查询
SELECT
CT.sku,
qty as total_qty,
(select SUM(qty) from shipping_table MT where CT.sku=MT.sku group by MT.sku)
as total_shipped_qty
FROM cart_items CT
WHERE CT.cart_id = '4935153'