簡體   English   中英

如何計算具有HAVING准則的MySQL條目

[英]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 BYHAVING子句中引用列別名。 它不需要使用反引號,但是我看到了直到出現反引號后才起作用的實例(非保留字):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM