首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的计数(*)

SQL中的计数(*)
EN

Stack Overflow用户
提问于 2011-05-26 20:33:04
回答 5查看 18.6K关注 0票数 6

我了解在处理一个表时如何在SQL中使用count(*),但是它在内部连接上是如何工作的呢?

例如:

代码语言:javascript
复制
SELECT branch, staffNo, Count(*)
FROM Staff s, Properties p 
WHERE s.staffNo = p.staffNo
GROUP BY s.staffNo, p.staffNo

staff包含staffNo staffName

属性包含属性管理详细信息(即哪些员工管理哪些属性)

这将返回由staff管理的属性数量,但是计数是如何工作的呢?例如,它如何知道要计算的内容?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-26 20:36:21

它是一个聚合函数-因此它由group by子句管理-每一行都将对应于一个唯一的分组(即staffNo),Count(*)将返回连接中与该分组匹配的记录数。

举个例子:

代码语言:javascript
复制
 SELECT branch, grade, Count(*)
 FROM Staff s, Properties p 
 WHERE s.staffNo = p.staffNo
 GROUP BY branch, grade

将返回每个分支机构的给定职级的工作人员数量。

代码语言:javascript
复制
 SELECT branch, Count(*)
 FROM Staff s, Properties p 
 WHERE s.staffNo = p.staffNo
 GROUP BY branch

将返回每个分支机构的员工总数。

代码语言:javascript
复制
 SELECT grade, Count(*)
 FROM Staff s, Properties p 
 WHERE s.staffNo = p.staffNo
 GROUP BY grade

将返回每个职系的员工总数。

票数 8
EN

Stack Overflow用户

发布于 2011-05-27 01:35:03

聚合函数(无论是count()sum()avg()等)对每个组中的行进行计算:然后根据查询中定义的选择列表将该组折叠/汇总/聚合为一行。

执行select查询的概念模型如下:

计算FROM子句中引用的所有表的笛卡尔乘积(就好像正在根据performed.

  • Apply clause.

  • Partitition performed.

  • Apply
  1. 中定义的准则,基于full join clause.
  2. Reduce
    1. to afull join to where group by中定义的准则,将一个组加入到组中,根据having clause
    2. Sort中定义的条件,根据order by子句

    中定义的条件,计算该order by中行上每个聚合函数的值

这个概念模型省略了对任何computecompute...by子句的处理。

这实际上不是什么,而是一个非常幼稚的SQL引擎实际执行查询的方式,但结果应该与您以这种方式最终得到的结果相同。

票数 4
EN

Stack Overflow用户

发布于 2011-05-26 20:39:14

您的查询无效。

您有一个不明确的列名staffno

您选择了branch,但没有按它分组-准备好为您选择语法错误(除MySQL之外的所有内容)或随机分支(MySQL)。

我认为您想知道的是,它将返回分组字段的每个“集合”的计数,因此对于每个s.staffno, p.staffno组合,该集合中有多少行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6138518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档