我有一个用于“分支”,“订单”和“产品”的表。每个订单和产品都连接到一个带有branch_id的分支。我需要一个sql语句来获取所有分支的列表,其中包含有多少订单的字段以及有多少产品的领域。
这有效:
SELECT b.*, COUNT(o.id) AS orderCount FROM branches b
LEFT JOIN orders o ON (o.branch_id = b.id) GROUP BY b.id
但它只获得订单数量,而不是产品。 如果我将其更改为添加产品数量,则金额是错误的,因为它获得的订单数量*产品数量。
如何在同一个SQL语句中获取订单和产品的数量?
答案 0 :(得分:11)
这样的事情应该有效(至少在sql server上 - 你没有指定引擎)。
SELECT
b.id
,COUNT(distinct o.id) AS orderCount
,COUNT(distinct p.id) AS productCount
FROM branches b
LEFT JOIN orders o
ON (o.branch_id = b.id)
left join products p
on p.product_id=b.id)
GROUP BY
b.id
答案 1 :(得分:5)
请尝试:
select
*,
(select COUNT(*) from Orders o where o.branch_id=b.id) OrderCount,
(select COUNT(*) from Products p where o.branch_id=p.id) ProductCount
From
branches b