2016-03-04 45 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;