查询orders表总数量与assigned_orders表已分配总量不匹配的记录
需求说明
我有两张表orders和assigned_orders:
- 创建订单时,订单及其对应数量存入
orders表 - 订单会按一定数量分配给不同供应商,比如
orders表中某订单总数量为500,其中300分配给供应商'A',100分配给供应商'B',剩余100未分配
现在需要从这两张表中查询出指定格式的记录。
表结构及数据
orders表
| id | customer_name | quantity |
|---|---|---|
| 1 | cust 1 | 500 |
| 2 | cust 2 | 700 |
assigned_orders表
| id | order_id | assigned_quantity |
|---|---|---|
| 1 | 1 | 300 |
| 2 | 1 | 100 |
预期查询结果
| id | order_id | quantity | assigned_quantity |
|---|---|---|---|
| 1 | 1 | 500 | 400 |
解决方案
可以通过左连接结合**聚合函数SUM()**实现需求,同时处理无分配记录的订单场景:
SELECT o.id, o.id AS order_id, o.quantity, COALESCE(SUM(ao.assigned_quantity), 0) AS assigned_quantity FROM orders o LEFT JOIN assigned_orders ao ON o.id = ao.order_id GROUP BY o.id, o.quantity;
关键说明
LEFT JOIN:保证即使订单没有任何分配记录(如order_id=2),也会被纳入结果集SUM(ao.assigned_quantity):汇总每个订单的总已分配数量COALESCE():将无分配记录时的NULL值转换为0,避免结果出现空值GROUP BY:按订单ID和总数量分组,确保每个订单仅返回一条汇总记录
内容的提问来源于stack exchange,提问作者Kamlesh Ghate
相关产品推荐
相关产品推荐

