为什么我应该使用聚合器函数而不在哪里?

时间:2015-09-07 15:29:56

标签: sql

我为什么要写这个:

Having count(id) > 1

而不是:

Where count(id) > 1

这仅适用于英语吗?

我认为如果发明where子句的程序员可以让它接受聚合器

或者有什么理由吗?在加载数据或类似的东西?

2 个答案:

答案 0 :(得分:4)

WHERE对行进行操作,HAVING对行集合(“groups”)进行操作。聚合函数不能用于单行,这没有任何意义。

MySQL documentation州:

  

对值集合进行操作的组(聚合)函数[...]如果在不包含GROUP BY子句的语句中使用组函数,则它等同于对所有行进行分组。

答案 1 :(得分:2)

原因是SQL按特定顺序评估项目,例如

  • 确定有问题的表格
  • 应用where子句来缩小行
  • 从列中获取值
  • 应用聚合(group by子句)
  • 应用聚合限制(包含子句)
  • 应用排序(按条款排序)

如果你试图在“where”子句中评估聚合,那么它实际上没有意义,因为它需要在聚合之前应用“where”子句。