【问题标题】:count(*) where cond = val, or count(cond = val)count(*) 其中 cond = val,或 count(cond = val)
【发布时间】:2011-05-01 17:20:22
【问题描述】:

这两种方法有什么区别?

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

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

在我看来,他们似乎在做同样的事情;我认为数据库不是这种情况。一种方法是否比另一种更好地利用索引?

在这种情况下,我使用 MySQL,但这里首选通用答案。

【问题讨论】:

  • 您需要指定您使用的 DBMS。

标签: sql select count where-clause


【解决方案1】:

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

【讨论】:

  • 你似乎是对的,我不知道我为什么不这么认为。
  • 奇怪的是,你可能会做一个 SUM(CAST(column = 'value') AS BIT) 并检索计数,但这似乎需要很多晦涩的工作来避免 where 子句.可能不需要强制转换,具体取决于您的 DBMS。
【解决方案2】:

count(column = '值')

通常似乎暗示您正在计算比较的布尔结果,它应该计算表中的所有行,尽管您的特定 DBMS 可能有一个例外。

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

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 2011-05-06
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2019-08-07
    相关资源
    最近更新 更多