GROUP BY如何使用COUNT(*)

本斯卡比亚

我有此查询,该查询查找每个工作人员处理的属性的数量及其分支机构的编号:

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(*)什么为什么要计算资产数量而不计算(例如)每个分支机构的员工数量?

戈登·利诺夫(Gordon Linoff)

这有点长,可以发表评论。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章