場合によっては、(HAVING 句を使用して) グループ全体に条件を適用する前に、(WHERE 句を使用して) グループから個々の行を除外したい場合があります。
HAVING 句は WHERE 句に似ていますが、グループ全体 (つまり、グループを表す結果セット内の行) にのみ適用されますが、WHERE 句は個々の行に適用されます。 クエリには、WHERE 句と HAVING 句の両方を含めることができます。 その場合:
WHERE 句は、ダイアグラム ペインのテーブルまたはテーブル値オブジェクトの個々の行に最初に適用されます。 WHERE 句の条件を満たす行のみがグループ化されます。
その後、HAVING 句が結果セット内の行に適用されます。 HAVING 条件を満たすグループのみがクエリ出力に表示されます。 HAVING 句は、GROUP BY 句または集計関数にも表示される列にのみ適用できます。
たとえば、 titles
テーブルと publishers
テーブルを結合して、一連のパブリッシャーの平均書籍価格を示すクエリを作成するとします。 特定の発行元のセット (おそらくカリフォルニア州の発行元のみ) の平均価格を表示する必要があります。 その場合でも、10.00 ドルを超える場合にのみ、平均価格を表示する必要があります。
最初の条件を確立するには、WHERE句を含めて、カリフォルニアにいない発行元を除外し、その後、平均価格を計算します。 2 番目の条件には HAVING 句が必要です。これは、条件がデータのグループ化と集計の結果に基づいているためです。 結果の SQL ステートメントは次のようになります。
SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10
[抽出条件] ウィンドウで HAVING 句と WHERE 句の両方を作成できます。 既定では、列の検索条件を指定すると、条件は HAVING 句の一部になります。 ただし、条件を WHERE 句に変更できます。
同じ列を含む WHERE 句と HAVING 句を作成できます。 そのためには、条件ペインに列を 2 回追加し、HAVING 句の一部として 1 つのインスタンスを指定し、WHERE 句の一部としてもう 1 つのインスタンスを指定する必要があります。
集計クエリで WHERE 条件を指定するには
クエリのグループを指定します。 詳細については、「クエリ結果 (Visual Database Tools) での行のグループ化の」を参照してください。
基準ペインにまだ含まれていない場合、WHERE 条件の基にしたい列を追加してください。
データ列が GROUP BY 句の一部であるか、集計関数に含まれていない場合は、Output 列をクリアします。
[ フィルター ] 列で、WHERE 条件を指定します。 クエリおよびビュー デザイナーは、SQL ステートメントの HAVING 句に条件を追加します。
注
このプロシージャの例に示すクエリは、
titles
とpublishers
の 2 つのテーブルを結合します。クエリのこの時点で、SQL ステートメントには HAVING 句が含まれています。
SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id GROUP BY titles.pub_id HAVING publishers.state = 'CA'
[グループ化] 列で、グループと概要のオプションの一覧から [場所] を選択します。 クエリおよびビュー デザイナーは、SQL ステートメントの HAVING 句から条件を削除し、WHERE 句に追加します。
代わりに、SQL ステートメントが WHERE 句を含むように変更されます。
SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id WHERE publishers.state = 'CA' GROUP BY titles.pub_id
こちらもご覧ください
クエリ結果を並べ替え、グループ化する (ビジュアルデータベースツール)
クエリ結果の集計 (Visual Database Tools)