2013-05-27 110 views
8

我有一个表的“分支”,“订单”和“产品。每个订单和产品连接到与branch_id一个分支。我需要一个SQL语句获取列表与现场所有分支有多少订单,现场有多少产品SQL SELECT COUNT加入

这工作:

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语句的订单和产品这两者的量?

回答

10

像这样的东西应该工作(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 
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 
+1

该解决方案更加灵活,因为你可以把你所有的条件,同时得到具体的项目数,感谢 – CIRCLE

+0

子查询像这样的大滑坡。您可以非常快速地让代码非常慢。 – Dan