我有此查询,该查询查找每个工作人员处理的属性的数量及其分支机构的编号:
SELECT s.branchNo, s.staffNo, COUNT(*) AS myCount
FROM Staff s, PropertyForRent p
WHERE s.staffNo=p.staffNo
GROUP BY s.branchNo, s.staffNo
两种关系是:
Staff{staffNo, fName, lName, position, sex, DOB, salary, branchNO}
PropertyToRent{propertyNo, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo}
SQL如何知道所指的COUNT(*)
是什么?为什么要计算资产数量而不计算(例如)每个分支机构的员工数量?
这有点长,可以发表评论。
COUNT(*)
正在计算每个组中的行数。它没有专门计算任何特定的列。相反,正在发生的是,它join
正在产生多个属性,因为对于给定的s.branchNo
和值,这些属性导致多行s.staffNo
。
如果包含列名,它甚至会更加“令人困惑”。以下通常都将返回相同的值:
COUNT(*)
COUNT(s.branchNo)
COUNT(s.staffNo)
COUNT(p.propertyNo)
使用列名,COUNT()
确定列中没有NULL
值的行数。
最后,您应该学习join
在查询中使用正确的显式语法。将join
条件放在on
子句中,而不是where
子句中:
SELECT s.branchNo, s.staffNo, COUNT(*) AS myCount
FROM Staff s JOIN
PropertyForRent p
ON s.staffNo = p.staffNO
GROUP BY s.branchNo, s.staffNo;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句