mySQL の構文のため、このステートメントは許可されていません (カウントされた要素は WHERE 部分内では使用できません)。
Illegal syntax:
SELECT COUNT(x) AS amount ... WHERE amount > 0
しかし、 WHERE を介して COUNTed 要素を処理するにはどうすればよいでしょうか?
元のクエリでは、思ったとおりに動作しない場合があることに注意してください。あなたはおそらくWHERE x > 0
代わりに欲しいでしょう:
SELECT COUNT(x) AS amount ... WHERE x > 0
これはHAVING amount > 0
、0より大きいx値がある場合は本質的に意味がないためです。MySQLは自動的にすべての行をグループ化して含め、すべての行をカウントします。xの量がゼロ以外の行の数を知りたいようです。そのため、WHEREで、それらの行のみがカウントされる元の基準に一致するように指定する必要があります。HAVINGを使用した集計関数が必要な例については、以下を参照してください。
これはで行いHAVING
ます。構文はとまったく同じですWHERE
が、集計後に評価されます。
SELECT COUNT(x) AS amount ... HAVING amount > 0
この違いは重要です。WHEREでカウントされる行を制限してから、HAVINGで返される行を制限できるからです。
たとえば、1000ドルを超える場合にのみ、10ドル未満の売上で部門ごとにどれだけのお金を稼いだかを知りたいとしましょう。
SELECT
SUM(amount) as total_sales
...
WHERE amount < 10.0
GROUP BY department
HAVING total_sales > 1000.0
SELECT COUNT(x) AS amount ... HAVING amount > 0
HAVING
このクエリにはを使用する必要があります。と同じですWHERE
が、特にCOUNT(x)
!
SQL
SELECT COUNT(x) AS amount ... HAVING amount > 0