4

HAVINGとWHEREの違いを理解しようとしています。HAVINGこれがGROUPBYステートメントで使用されていることを理解しています。しかし、なぜ次のステートメントが受け入れられるのか理解できません。

select SUM(child_id) from children WHERE child_ID = 5 GROUP BY Child_ID

正しいステートメントはすべきではありませんselect SUM(child_id) from children GROUP BY Child_ID HAVING child_ID = 5か?

4

2 に答える 2

6

WHERE句は、グループ化プロセスが発生する前に実行され、入力テーブルのフィールドにのみアクセスできます。HAVINGは、グループ化プロセスが発生した後に実行され、グループ化プロセスで計算された集計値の値に基づいて結果をフィルタリングできます。

于 2013-03-12T20:37:01.923 に答える
2

WHERE句は、HAVINGが使用されている場合でも使用できます。それらは非常に異なることを意味します。それについて考える方法は次のとおりです。

  • WHERE句は、レコードレベルでフィルタとして機能します
  • 通過したものはすべて、GROUPBYで指定されたグループに入れられます
  • 次に、HAVING句は、集計(SUM、COUNT、MINなど)条件に基づいてグループを除外します。

したがって、テーブルがある場合:(STORE_ID、STATE_CODE、SALES)

Select STATE, SUM(SALES)
from MyTable
Where SALES > 100
Group By STATE
Having Sum(Sales) > 1000

これにより、最初に、売上が100を超えるストアレコードのみを読み取るようにフィルタリングされます。グループごとに(州ごとに)、売上が100以上のストアのみの売上が合計されます。次に、州レベルの合計が1000を超えない限り、すべての州を削除します。[注:州の合計は、100以下の売上のストアを除外します。]

于 2013-03-12T20:40:38.670 に答える