所以通常你可以做

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

计数(字段)将返回具有字段标准的条目数。ID> 100

但是,如果您要计算用具有标准的条目,例如

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

在这种情况下,该代码不起作用。

如何计算通过“ have”子句指定标准的条目?

提前致谢

有帮助吗?

解决方案

好, COUNT 作品 HAVING 应用于 结果集. 。因此,如果您需要计算它们的数字 - 您必须用另一个查询包装查询。

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

其他提示

我无法运行任何一个查询 - 他们给我一个1140的错误,因为“使用子句没有组的总汇总”(即: COUNT(field.id))。一切似乎根本与聚合无关,只有参考列别名进行比较的能力...

最广泛支持的手段是:

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 子句支持汇总功能,而无需将它们包裹在子查询中。

免责声明 - 我仅在SQL Server上进行了测试

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

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。如果不是,您将无法获得结果。

您有特定的问题吗?您要计算什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top