由於到MySQL的句法這種說法是不允許的(A計元素不能WHERE部分內使用):如何讓這個工作「SELECT COUNT(x)AS amount ... WHERE amount> 0」?
Illegal syntax:
SELECT COUNT(x) AS amount ... WHERE amount > 0
但我怎麼處理通過WHERE一個計算元素?
由於到MySQL的句法這種說法是不允許的(A計元素不能WHERE部分內使用):如何讓這個工作「SELECT COUNT(x)AS amount ... WHERE amount> 0」?
Illegal syntax:
SELECT COUNT(x) AS amount ... WHERE amount > 0
但我怎麼處理通過WHERE一個計算元素?
請注意,您的原始查詢可能不會做你認爲它。你可能想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
Mysql的'HAVING'是否在沒有'GROUP BY'的情況下工作? – Flimzy 2012-07-11 16:55:15
無論何時使用聚合函數,都有一個隱式的GROUP BY。 – 2012-07-11 16:56:33
如果不清楚,答案基本上是肯定的。當您的查詢包含聚合函數但沒有「GROUP BY」子句時,它會將結果集中的每一行「分組」爲1組,您可以使用having。 – 2012-07-11 16:58:31
SELECT COUNT(x) AS amount ... HAVING amount > 0
請注意,你可能打算這樣做,其中x> 0查看下列澄清我的答案。 – 2012-07-11 17:03:20