sql选择左连接的多个关系的计数

时间:2013-05-27 09:13:25

标签: sql

我有一个用于“分支”,“订单”和“产品”的表。每个订单和产品都连接到一个带有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语句中获取订单和产品的数量?

2 个答案:

答案 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