如何使用HAVING标准计算MySQL条目

时间:2010-09-20 01:14:26

标签: sql mysql aggregate-functions having

通常你可以做到

SELECT COUNT(field.id) FROM table WHERE field.id > 100

和COUNT(字段)将返回具有field.id>标准的条目数。 100

但接下来如果要计算用HAVING标准指定的条目,例如

,该怎么办?
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100

在这种情况下代码不起作用....

如何计算通过HAVING子句指定条件的条目?

提前致谢

3 个答案:

答案 0 :(得分:5)

好吧,COUNT工作之前 HAVING适用于结果集。因此,如果您需要计算他们的数量 - 您必须用另一个来包装您的查询。

SELECT COUNT(*) FROM (
    SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)

答案 1 :(得分:2)

我不能按原样运行任何一个查询 - 他们在“使用没有GROUP BY子句的聚合”(IE:COUNT(field.id))时给出了1140错误。一切看起来根本不与聚合相关,只是引用列别名进行比较的能力......

支持最广泛的手段是:

SELECT field.id * 10 AS foo 
  FROM table 
 WHERE field.id * 10 > 100

MySQL支持在GROUP BYHAVING子句中引用列别名。它不需要使用反引号,但我看到在反引号出现之前不能使用的实例(非保留字):

SELECT field.id * 10 AS foo 
  FROM table 
HAVING `foo` > 100

我不推荐这种方法 - 它在SQL Server上受支持,但不支持Oracle ...

HAVING子句与WHERE子句类似,区别在于HAVING子句支持聚合函数,而不需要将它们包装在子查询中。

答案 2 :(得分:1)

免责声明 - 我只在SQL Server上测试了这个

在这种情况下,HAVING只会对整个返回的集合执行任何聚合查询。首先,你无法运行

SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100

因为field.id不包含在定义组或聚合函数的子句中;它只是不编译。

用那个说,下面的SQL -

SELECT COUNT(field.id) FROM table HAVING COUNT(field.id) > 100
如果计数大于100,

将返回表格中的行数。如果不是,则不会得到任何结果。

您是否有特定的问题?你想算什么?