0

例如,我可能有这样的架构: 图式

我试图得到一些东西,就像:

| inventory_id | all_paid_merchandise_quantity | all_shipped_merchandise_quantity |
|--------------|-------------------------------|----------------------------------|
| 1            | 10                            | 100                              |
| 2            | 11                            | 12                               |

我已经想出了类似 的子查询all_paid_merchandise_quantityall_shipped_merchandise_quantity. 但我想知道是否有更好的方法来做到这一点?

编辑:“丑陋”的查询。

SELECT
    inventory.id AS inventory_id,
    (SELECT sum(order_items.quantity) FROM "order" LEFT JOIN "order_items" ON order_items.order_id="order".id WHERE "order".has_shipped=true AND "order_items".merchandise_id=merchandise.id) AS all_shipped_merchandise_quantity,
    (SELECT sum(order_items.quantity) FROM "order" LEFT JOIN "order_items" ON order_items.order_id="order".id WHERE "order".has_paid=true AND "order_items".merchandise_id=merchandise.id) AS all_paid_merchandise_quantity
FROM 
    inventory
LEFT JOIN merchandise ON merchandise.inventory_id=inventory.id
GROUP BY inventory.id, merchandise.id
ORDER BY inventory.id
4

1 回答 1

0

尝试:

SELECT
    inventory.id AS inventory_id,
    merchandise.id AS merchandise_id,
    sum(order_items.quantity) FILTER (WHERE "order".has_shipped) AS all_shipped_merchandise_quantity,
    sum(order_items.quantity) FILTER (WHERE "order".has_paid) AS all_paid_merchandise_quantity
FROM 
    inventory
LEFT JOIN merchandise ON merchandise.inventory_id=inventory.id
LEFT JOIN "order_items" ON "order_items".merchandise_id=merchandise.id
LEFT JOIN "order" ON (order_items.order_id="order".id AND ("order".has_shipped OR "order".has_paid))
GROUP BY inventory.id, merchandise.id
ORDER BY inventory.id
于 2017-06-15T19:09:54.997 回答