[英]How do I count MySQL entries with a HAVING criterion
所以通常你可以做
SELECT COUNT(field.id) FROM table WHERE field.id > 100
和COUNT(field)將返回符合標准field.id> 100的條目數
但是,如果要計算用HAVING准則指定的條目,該怎么辦呢?
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
該代碼在這種情況下不起作用。
我該如何對通過HAVING子句指定條件的條目進行計數?
提前致謝
好吧, COUNT
HAVING
之前的作品將應用於結果集 。 因此,如果您需要計算他們的人數-您必須用另一個查詢來包裝您的查詢。
SELECT COUNT(*) FROM (
SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
我不能按原樣運行任何一個查詢-它們給我一個1140錯誤,因為“使用沒有GROUP BY子句的聚合”(即: 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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.