2016-03-04 97 views
0

我構建了此查詢以向我顯示有多少員工和客戶到分支,它給了我重複,因此我需要將它們分組。但是,當我添加組時,查詢無效。任何人有任何想法爲什麼?當使用組時,SQL查詢無法正常工作

SELECT B.branchID, B.branchName, COUNT(E.staffNo) AS "No. Of Employees", COUNT(C.customerID) AS "No. Of Customers" 
     FROM Branch B, Employee E, Customer C 
     WHERE E.employeeBranchID = B.branchID 
     AND B.branchID = C.customerBranchID 
     GROUP BY B.branchID; 
+2

你是什麼意思「無效」?如果出現錯誤,請在問題中包含錯誤。 –

+0

在mysql上這應該工作,在其他數據庫你需要添加B.branchName到GROUP BY – Mihai

回答

0
SELECT B.branchID, B.branchName, COUNT(E.staffNo) AS "No. Of Employees", COUNT(C.customerID) AS "No. Of Customers" 
    FROM Branch B, Employee E, Customer C 
    WHERE E.employeeBranchID = B.branchID 
    AND B.branchID = C.customerBranchID 
    GROUP BY B.branchID, B.branchName; 

大多數DB需要組由項目列表==在選擇項目的聚合函數之前列表

2

該查詢將被更好地寫成:

SELECT B.branchID, B.branchName, COUNT(E.staffNo) AS "No. Of Employees", COUNT(C.customerID) AS "No. Of Customers" 
FROM Branch B JOIN 
    Employee E 
    ON E.employeeBranchID = B.branchID JOIN 
    Customer C 
    ON B.branchID = C.customerBranchID 
GROUP BY B.branchID, B.branchName; 

如果您處於ANSI模式,那麼MySQL的行爲與大多數其他數據庫相似,並且會返回錯誤,因爲B.branchName未歸類。

注:

  • 使用明確JOIN語法。從不在FROM條款中使用逗號。
  • 所有未彙總的列都在GROUP BY中。
  • 如果branchId被聲明爲branch上的主密鑰或唯一密鑰,那麼您的原始查詢符合ANSI標準。但是,大多數數據庫仍然不接受查詢。
+0

我試過你的方法,不幸的是它不工作'1064-你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在'客戶C ON'附近使用。B.branchID = C.customerBranchID GROUP BY B.branchID,B.branch'at line 5' – Ghost

+1

還有一個「加入「在客戶C之前缺失 –

0

SELECT B.branchID,B.branchName,COUNT(E.staffNo)AS 「員工號」,COUNT(C.customerID)AS 的方式從分支B 「客戶號」 左加入員工Ë在E.employeeBranchID = B.branchID左加入客戶C上B.branchID = C.customerBranchID GROUP BY B.branchID;