如果您的教授正在谈论SQL,那么该陈述是错误的。COUNT(x)
将返回其中x IS NOT NULL
包括重复项的行数。COUNT(*) or COUNT([constant])
是一种特殊情况,它将对行进行计数,即使每一列都在其中也是如此NULL
。但是,除非您指定,否则始终会计入重复项COUNT(distinct x)
。例:
with t(x,y) as ( values (null,null),(null,1),(1,null),(1,1) )
select count(*) from t
4
select count(1) from t
4
select count(distinct 1) from t
1
select count(x) from t
2
select count(distinct x) from t
1
COUNT(distinct *)
无效的AFAIK。
附带说明,NULL引入了一些不直观的行为。举个例子:
SELECT SUM(x) + SUM(y), SUM(x + y) FROM T
4, 2
即:
SUM(x)+SUM(y) <> SUM(x+y)
如果他/她正在谈论一种关系系统,例如CJ Date和Hugh Darwen 所著的《数据库,类型和关系模型:第三宣言》所述,那将是正确的说法。
说我们有关系:
STUDENTS = Relation(["StudentId", "Name"]
, [{"StudentId":'S1', "Name":'Anne'},
{"StudentId":'S2', "Name":'Anne'},
{"StudentId":'S3', "Name":'Cindy'},
])
SELECT COUNT(NAME) FROM STUDENTS
对应于:
COUNT(STUDENTS.project(['Name']))
即
COUNT( Relation(["Name"]
, [{"Name":'Anne'},
{"Name":'Cindy'},
]) )
这将返回2。