0

だから通常あなたはただすることができます

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句で基準が指定されているエントリをカウントするにはどうすればよいですか?

前もって感謝します

4

3 に答える 3

5

さて、結果セットに適用されるCOUNTに動作します。したがって、それらの数を数える必要がある場合は、クエリを別のクエリでラップする必要があります。 HAVING

SELECT COUNT(*) FROM (
    SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
于 2010-09-20T01:35:56.543 に答える
2

どちらのクエリもそのまま実行することはできません。「GROUPBY句のない集計を使用する」(IE:)に対して1140エラーが発生しますCOUNT(field.id)。すべてが集計にまったく関係していないように見えます。比較のために列エイリアスを参照する機能だけです...

最も広くサポートされている手段は次のとおりです。

SELECT field.id * 10 AS foo 
  FROM table 
 WHERE field.id * 10 > 100

MySQLは、GROUP BYorHAVING句での列エイリアスの参照をサポートしています。バックティックを使用する必要はありませんが、バックティックが存在するまで機能しないインスタンス(予約語ではない)を確認しました。

SELECT field.id * 10 AS foo 
  FROM table 
HAVING `foo` > 100

このアプローチはお勧めしません。SQLServerではサポートされていますが、Oracleではサポートされていません...

このHAVING句は句に似てWHEREいますが、違いは、HAVING句がサブクエリでラップされる必要なしに集計関数をサポートすることです。

于 2010-09-20T01:33:36.673 に答える
1

免責事項-私はこれをSQLServerでのみテストしました

この場合、HAVINGは、返されたセット全体に対して集約クエリのみを実行します。まず第一に、あなたは走ることができません

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より大きい場合、テーブル内の行のカウントを返します。そうでない場合、結果は得られません。

特定の問題を念頭に置いていますか?何を数えようとしていますか?

于 2010-09-20T01:33:31.913 に答える