2010-10-28 76 views
0

这两种方法有什么区别?count(*)其中cond = val或count(cond = val)

select count(*) from `table` where `column` = 'value'; 

select count(`column` = 'value') from `table`; 

对我来说,他们似乎做同样的事情;我认为这不是数据库的情况。一种方法是否比其他方法更好地利用指标?

在这种情况下,我使用MySQL,但一般的答案在这里是首选。

+0

您需要指定您正在使用的DBMS。 – 2010-10-28 06:37:39

回答

3

计数(column =“值”)

一般似乎意味着您计算比较,这应该算表中的所有行,虽然也许你特定的DBMS有异常的布尔结果。

在where子句中过滤查询。如果您需要为其他数据库编写类似的查询,这将是一个好习惯。

0

通过mySQL运行您的示例会产生不同的结果。您发布的第二个查询不会限制结果集 - 返回所有行。然而,第一个查询的确如此。

+0

你似乎是正确的,我不知道为什么我认为不然。 – 2010-10-28 06:50:01

+0

奇怪的是,你可能会做一个SUM(CAST('column' ='value')AS BIT)并检索计数,但这似乎是很多晦涩的工作以避免where子句。根据你的数据库管理系统,这个转换可能是不必要的。 – wllmsaccnt 2010-10-28 06:53:26