通常你可以做到
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子句指定条件的条目?
提前致谢
答案 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 BY
或HAVING
子句中引用列别名。它不需要使用反引号,但我看到在反引号出现之前不能使用的实例(非保留字):
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,将返回表格中的行数。如果不是,则不会得到任何结果。
您是否有特定的问题?你想算什么?