Udostępnij przez


How to: Use HAVING and WHERE Clauses in the Same Query (Visual Database Tools)

W niektórych przypadkach zachodzi potrzeba wykluczenia poszczególnych wierszy z grup (przy użyciu klauzula WHERE) przed zastosowaniem warunku względem wszystkich grup jako całości (przy użyciu klauzula HAVING).

Klauzula HAVING jest podobna do klauzuli WHERE, lecz ma zastosowanie tylko do grup jako całości (do wierszy zestaw wyników reprezentujących grupy), podczas gdy klauzula WHERE odnosi się do poszczególnych wierszy.Kwerenda może zawierać zarówno klauzula WHERE i HAVING.W takim przypadek:

  • Klauzula WHERE najpierw stosowany jest do poszczególnych wierszy w tabelach lub wartości w tabela obiektów w okienku diagramu.Grupowane są tylko te wiersze, które spełniają warunki określone w klauzula WHERE.

  • Następnie stosowana jest klauzula HAVING względem wierszy zestaw wyników.Tylko grupy spełniające klauzuli HAVING warunki są wyświetlane w wynikach kwerendy.klauzula HAVING można stosować tylko do kolumn, które również są wyświetlane w grupie, BY klauzula lub w funkcja agregująca.

Załóżmy, że użytkownik łączącą titles i publishers tabele do utworzenia kwerendy, wyświetlanie ceny książki średnia dla zestaw wydawców. Aby wyświetlić średnią cenę tylko określony zestaw dla wydawców — być może tylko wydawców w stanie Kalifornia.A nawet wówczas, który chcesz wyświetlić średnią cenę tylko wtedy, gdy jest niż 10,00 dolarów.

Pierwszy warunek może ustanowić przy użyciu klauzula WHERE, wszyscy wydawcy, które nie znajdują się w Kalifornii, przed obliczeniem średniej ceny.Drugi warunek wymaga klauzula HAVING, ponieważ ten warunek jest tworzony na podstawie wyniki grupowanie i sumowania danych.Wynikowa instrukcja języka SQL może wyglądać w następujący sposób:

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

Można utworzyć zarówno HAVING i klauzul WHERE w okienku kryteriów.Domyślnie jeśli określony warunek wyszukiwania kolumna, warunek ten jest uwzględniany jako część klauzula HAVING.Można jednak zmienić warunku WHERE jest klauzula.

Można utworzyć klauzulę WHERE i związanych z tym samym klauzula HAVING kolumna.Aby to zrobić, należy dodać dwa razy, aby w okienku kryteriów kolumna, a następnie określić jedno wystąpienie jako część klauzula HAVING, a drugie wystąpienie jako część klauzula WHERE.

Aby określić warunek WHERE w agregacja kwerendy

  1. Określ grupy dla swojej kwerendy.Aby uzyskać więcej informacji zobacz Jak Grupa wierszy w wynikach kwerendy (Visual Database Tools).

  2. Jeśli nie jest jeszcze w okienku kryteriów, należy dodać kolumna, w którym ma zostać utworzony warunek WHERE.

  3. Wyczyść Dane wyjściowe kolumny, chyba że kolumna danych jest częścią klauzula GROUP BY lub dołączone w funkcja agregującej.

  4. W Filtr kolumna, określ warunek WHERE.Kwerendę i projektanta widoku dodaje warunek do klauzula HAVING w instrukcja języka SQL.

    Uwaga

    Kwerendy, w przykładzie do wykonania tej procedury łączy dwie tabele titles i publishers.

    W tym momencie w kwerendzie, instrukcja języka SQL zawiera HAVING klauzula:

    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. W Grupuj według Wybierz opcję kolumnieGdzie na liście opcji grupowania i sumowania.Kwerendę i projektanta widoku usuwa warunek z klauzula HAVING w instrukcja języka SQL i doda go do klauzula WHERE.

    Zmiany instrukcja języka SQL w zamian dołączyć klauzulę 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