我了解在处理一个表时如何在SQL中使用count(*),但是它在内部连接上是如何工作的呢?
例如:
SELECT branch, staffNo, Count(*)
FROM Staff s, Properties p
WHERE s.staffNo = p.staffNo
GROUP BY s.staffNo, p.staffNostaff包含staffNo staffName
属性包含属性管理详细信息(即哪些员工管理哪些属性)
这将返回由staff管理的属性数量,但是计数是如何工作的呢?例如,它如何知道要计算的内容?
发布于 2011-05-26 20:36:21
它是一个聚合函数-因此它由group by子句管理-每一行都将对应于一个唯一的分组(即staffNo),Count(*)将返回连接中与该分组匹配的记录数。
举个例子:
SELECT branch, grade, Count(*)
FROM Staff s, Properties p
WHERE s.staffNo = p.staffNo
GROUP BY branch, grade将返回每个分支机构的给定职级的工作人员数量。
SELECT branch, Count(*)
FROM Staff s, Properties p
WHERE s.staffNo = p.staffNo
GROUP BY branch将返回每个分支机构的员工总数。
SELECT grade, Count(*)
FROM Staff s, Properties p
WHERE s.staffNo = p.staffNo
GROUP BY grade将返回每个职系的员工总数。
发布于 2011-05-27 01:35:03
聚合函数(无论是count()、sum()、avg()等)对每个组中的行进行计算:然后根据查询中定义的选择列表将该组折叠/汇总/聚合为一行。
执行select查询的概念模型如下:
计算FROM子句中引用的所有表的笛卡尔乘积(就好像正在根据performed.
full join clause.full join to where group by中定义的准则,将一个组加入到组中,根据having clauseorder by子句中定义的条件,计算该order by中行上每个聚合函数的值
这个概念模型省略了对任何compute或compute...by子句的处理。
这实际上不是什么,而是一个非常幼稚的SQL引擎实际执行查询的方式,但结果应该与您以这种方式最终得到的结果相同。
发布于 2011-05-26 20:39:14
您的查询无效。
您有一个不明确的列名staffno。
您选择了branch,但没有按它分组-准备好为您选择语法错误(除MySQL之外的所有内容)或随机分支(MySQL)。
我认为您想知道的是,它将返回分组字段的每个“集合”的计数,因此对于每个s.staffno, p.staffno组合,该集合中有多少行。
https://stackoverflow.com/questions/6138518
复制相似问题