次の方法で共有


同じクエリで HAVING 句と WHERE 句を使用する (Visual Database Tools)

場合によっては、(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 条件を指定するには

  1. クエリのグループを指定します。 詳細については、「クエリ結果 (Visual Database Tools) での行のグループ化の」を参照してください。

  2. 基準ペインにまだ含まれていない場合、WHERE 条件の基にしたい列を追加してください。

  3. データ列が GROUP BY 句の一部であるか、集計関数に含まれていない場合は、Output 列をクリアします。

  4. [ フィルター ] 列で、WHERE 条件を指定します。 クエリおよびビュー デザイナーは、SQL ステートメントの HAVING 句に条件を追加します。

    このプロシージャの例に示すクエリは、titlespublishersの 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'  
    
  5. [グループ化] 列で、グループと概要のオプションの一覧から [場所] を選択します。 クエリおよびビュー デザイナーは、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)