count(谓词)在MySQL中做什么?

count(谓词)在MySQL中做什么?,mysql,Mysql,我惊讶地看到我的一个学生在写作 select count(title='Staff') from titles 针对MySQL员工数据库。这是否意味着是一个很好的捷径 select sum(case when title='Staff' then 1 else 0 end) from titles 在MySQL 5.6中,哪一个无法工作(返回完整的表计数)?否! 不能根据条件计数,将其写入括号中。它只返回该表中的所有行 从标题中选择计数(title='Staff') 返回标题中的所有行否,此

我惊讶地看到我的一个学生在写作

select count(title='Staff') from titles
针对MySQL员工数据库。这是否意味着是一个很好的捷径

select sum(case when title='Staff' then 1 else 0 end) from titles

在MySQL 5.6中,哪一个无法工作(返回完整的表计数)?

! 不能根据条件计数,将其写入括号中。它只返回该表中的所有行

从标题中选择计数(title='Staff')

返回
标题中的所有行

否,此
计数
不是您编写的
总和
的简写

COUNT(exp)
统计非空
exp
的行数。
title='Staff'
是一个布尔表达式,如果title是'Staff',则计算结果为
true
,如果是任何其他值,则计算结果为
false
,如果是null,则计算结果为
null

因此,这个查询相当于

select count(title) from titles
反过来,这相当于

select count(*) from titles where title is not null

你问那个学生了吗?您试过它了吗?它在语法上是正确的,但返回表基数,正如我已经写过的。“在MySQL 5.6(返回完整表计数)中,它就是不起作用的?”“那么带
null
值的行呢?他们算吗?这个问题是在数据库入门课的背景下提出的。空值起次要作用。我更关心的是学生们没有掌握选择(限制)操作符的概念。关闭,但它实际上会返回标题不为NULL的所有行
,@Mureinik回答是的,它非常好而且完整。这也让我更好地理解了mysql count函数的工作原理。好吧,那么这只是一个无用的语法,让人感到困惑。难怪其他RDBMS不允许这样做。(我个人的意见是count不应该有任何参数)。@TegiriNenashi:你可以传递
count
你想要它“计数”的字段。检查此示例:
COUNT(*)
将返回找到的所有行,而
COUNT(title)
将返回标题为非空的所有行。如果将标题不为null的
添加到查询中,则
COUNT(*)
可以,但如果没有
where
子句,可能会得到不同的结果。@TegiriNenashi实际上,
COUNT(exp)
是ANSI SQL的一部分。至于它的有用性/无用性,我想这是旁观者的看法。再说一遍,我理解语法,但我不同意它有任何作用。“从标题中选择count(title='Staff')、count(title='Programmer')、count(title不为空)”将减少混淆,并且更具表现力。