2013-12-10 64 views
2
我有使用一個SQL查詢加計數()函數..說,如果

附加內先前計算的聯接修改結果

SELECT B.ID COUNT(S.BRANCH_ID) FROM BRANCH B 
    INNER JOIN STAFF S ON S.BRANCH_ID = B.ID 
    GROUP BY B.ID; 

從這樣做,我會得到的結果問題

  b.id    count 
      1     6 
      2     6 
      3     6 
      4     7 
      5     6 

這是很好的。但是,如果我甚至添加一個額外的內部連接,我會得到完全不同的和錯誤的結果。所以,如果我把比如..

  SELECT COUNT(S.BRANCH_ID) FROM BRANCH B 
      INNER JOIN STAFF S ON S.BRANCH_ID = B.ID 
      INNER JOIN TOOL_STOCK TS ON TS.BRANCH_ID = B.ID 
      GROUP BY B.ID; 

現在的結果我得到的將是...

  b.id    count 
      1     96 
      2     96 
      3     96 
      4    112 
      5     96 

這是爲什麼?我如何阻止它?乾杯!

+0

你要計算什麼?你的表格之間有什麼關係? –

回答

1

嘗試

SELECT B.ID, COUNT(DISTINCT S.STAFF_ID) FROM BRANCH B 
INNER JOIN STAFF S ON S.BRANCH_ID = B.ID 
INNER JOIN TOOL_STOCK TS ON TS.BRANCH_ID = B.ID 
GROUP BY B.ID; 

從工作人員表的主鍵字段替換S.STAFF_ID。

您的問題是COUNT函數返回所有行加入並返回後匹配GROUP BY子句的行數。

在您的初始查詢中,您正在查找每個分支的員工數量,第二個員工數量乘以庫存數量。

+0

這已經很好了!謝謝! :) – bdavies6086

1

當您添加第二個連接時,您將獲得每個分支的STAFF + TOOLS的計數。

如果您希望返回所有數據,但只計算一種記錄類型的計數,您可能需要添加子查詢。

我認爲你的問題的關鍵是,你實際上試圖計數?