我正在尝试在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
的整个数量。
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
答案 0 :(得分:0)
使用标量子查询
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'