我有3张桌子:
首先,我想列出所有用户的订单数量,如下所示:
这很简单,我正在做一个“选择名称,来自用户的计数(id),其中的users.id = orders.userId group by name”。
现在,我想进一步过滤此数据,以便只显示订单中包含status =“unprocessed”的用户。我不知道如何分组来自2个表的数据。最后,我希望获得如下数据:
谢谢!
答案 0 :(得分:1)
使用:
SELECT u.name,
COUNT(o.id) AS numOrders
FROM USERS u
JOIN ORDERS o ON o.userid = u.id
WHERE EXISTS(SELECT NULL
FROM ORDERS_ITEMS oi
WHERE oi.orderid = o.id
AND oi.status = 'unprocessed')
GROUP BY u.name
使用JOIN到ORDERS_ITEMS
需要在COUNT中使用DISTINCT:
SELECT u.name,
COUNT(DISTINCT o.id) AS numOrders
FROM USERS u
JOIN ORDERS o ON o.userid = u.id
JOIN ORDERS_ITEMS oi ON oi.orderid = o.id
AND oi.status = 'unprocessed'
GROUP BY u.name
...因为订单中有多个未处理的商品时行重复...
答案 1 :(得分:0)
select name, count(users.id) from users
left join orders
on users.id=orders.userId
left join orders_items
on orders.id=orders_items.orderId
where orders_items.status="unprocessed"
我现在正在测试,不太确定我是否正确。 编辑:似乎很好。