2013-05-27 109 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