0

mySQL の構文のため、このステートメントは許可されていません (カウントされた要素は WHERE 部分内では使用できません)。

Illegal syntax:
SELECT COUNT(x) AS amount ... WHERE amount > 0

しかし、 WHERE を介して COUNTed 要素を処理するにはどうすればよいでしょうか?

4

3 に答える 3

3

編集

元のクエリでは、思ったとおりに動作しない場合があることに注意してください。あなたはおそらく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
于 2012-07-11T16:53:14.673 に答える
2
SELECT COUNT(x) AS amount ... HAVING amount > 0
于 2012-07-11T16:53:02.083 に答える
1

HAVINGこのクエリにはを使用する必要があります。と同じですWHEREが、特にCOUNT(x)

SQL

SELECT COUNT(x) AS amount ... HAVING amount > 0
于 2012-07-11T16:53:54.217 に答える