2012-07-11 67 views

回答

3

編輯

請注意,您的原始查詢可能不會做你認爲它。你可能想WHERE x > 0代替:

SELECT COUNT(x) AS amount ... WHERE x > 0 

這是因爲HAVING amount > 0本質上是毫無意義的,如果有任何x值大於0,MySQL將自動組包含所有行的,他們中的每一個計數。它看起來像要知道x中具有非零數量的行數,因此您需要使用WHERE指定只有那些行應與要計數的原始條件匹配。請參閱下面的示例需要一個聚合函數 HAVING。

原來的答案:

爲此,您可以HAVING。語法與WHERE完全相同,但在聚合後進行評估。

SELECT COUNT(x) AS amount ... HAVING amount > 0 

的區別是很重要的,因爲它可以限制哪些行與WHERE計數,然後限制的行與已經返回。

舉例來說,假設我想知道我每部賺了多少錢,銷售收入低於$ 10美元,只有當它做了超過$ 1000:

SELECT 
    SUM(amount) as total_sales 
    ... 
WHERE amount < 10.0 
GROUP BY department 
HAVING total_sales > 1000.0 
+0

Mysql的'HAVING'是否在沒有'GROUP BY'的情況下工作? – Flimzy 2012-07-11 16:55:15

+0

無論何時使用聚合函數,都有一個隱式的GROUP BY。 – 2012-07-11 16:56:33

+0

如果不清楚,答案基本上是肯定的。當您的查詢包含聚合函數但沒有「GROUP BY」子句時,它會將結果集中的每一行「分組」爲1組,您可以使用having。 – 2012-07-11 16:58:31

2
SELECT COUNT(x) AS amount ... HAVING amount > 0 
1

您需要使用HAVING此查詢。它與WHERE相同,但是專門用於COUNT(x)

SQL

SELECT COUNT(x) AS amount ... HAVING amount > 0