列出每个工作人员处理的财产数量

时间:2018-09-23 15:45:45

标签: mysql sql

列出名字和姓氏以及它们拥有的属性的数量。

还需要包括不拥有任何财产但计数为0的工作人员。

在这里,我的工作人员和财产与staffNo。相关。

此查询仅显示拥有物业的员工及其拥有的人数,但不显示不拥有任何物业的员工

SELECT S.branchNo
     , fName
     , lName
     , S.staffNo
     , COUNT(*) AS "count" 
  FROM Staff S
     , PropertyForRent P 
 WHERE S.staffNo = P.staffNo 
 GROUP 
    BY S.branchNo
     , S.staffNo 
 ORDER 
    BY S.staffNo;

2 个答案:

答案 0 :(得分:1)

如果您需要包括没有财产的工作人员,请考虑left join。你知道那是什么吗您正在使用隐式连接。您需要学习正确的,明确的标准 join语法。它功能更强大,并且可以满足您的要求。

SELECT s.fName, s.lName, COUNT(P.staffNo) AS "count
FROM Staff S LEFT JOIN
     PropertyForRent P 
     ON S.staffNo = P.staffNo
GROUP BY fName, lName
ORDER BY S.staffNo;

您不应在SELECT中包括多余的列。如果您需要人员编号或其他列,请将其包括在GROUP BY中。

答案 1 :(得分:1)

  • 不要使用隐式联接。 Instead, use Explicit Join based syntax
  • 要获取所有不带任何属性的事件的工作人员,您需要使用Left Join(其中Staff表为最左边的表)。这样就可以产生Staff表的所有行(即使PropertyForRent表中没有匹配的条目)

使用以下查询:

SELECT S.branchNo, fName, lName, S.staffNo, 
       IFNULL(COUNT(*),0) AS "count" 
FROM Staff S 
LEFT JOIN PropertyForRent P ON S.staffNo = P.staffNo 
GROUP BY S.branchNo, S.staffNo 
ORDER BY S.staffNo