gpt4 book ai didi

sql - 使用分组依据计数(属性)和计数(*)之间的差异

转载 作者:行者123 更新时间:2023-12-01 09:34:24 26 4
gpt4 key购买 nike

我还没有理解 count(*) 和以属性为参数的 count 之间的区别。
这里我举个例子:有两种关系:

project (id, name, number);
employee (ssn, name, surname);
working_on (employee_ssn, project_id);

employee_ssn 引用 employee(ssn)project_id 引用 project(id)
主键:project(id)employee(ssn)、working_on (employee_ssnproject_id)。
现在我必须为每个项目查找项目的 ID、名称和从事该项目的员 worker 数。
一个正确的解决方案(在书中找到)是这个:

select id, name, count (*)
from working_on join project on id=project_id
group by name, id

我有,不明白为什么这个解决方案是有效的,不应该 count (*) 计算所有元组吗?为什么要通过这种方式获得工作的确切员 worker 数?
我已经写了这个解决方案:

select id, name, count (employee_ssn)
from working_on join project on id=project_id
group by name, id

解决方案是否等效?
而且一般来说,使用count(*)count(attribute)有区别吗?您能否提供一个示例,说明这两种语法产生不同的结果?

最佳答案

来自 documentation :

COUNT(expr)

Returns a count of the number of non-NULL values of expr in the rows retrieved by a SELECT statement.


COUNT(*) is somewhat different in that it returns a count of the number of rows retrieved, whether or not they contain NULL values.

换句话说:

COUNT(expr) 将返回 expr 没有 NULL 值的行数。

COUNT(*) 将返回返回的总行数。

您是否使用 GROUP BY 子句无关紧要。

关于sql - 使用分组依据计数(属性)和计数(*)之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10863936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com