Jak HAVING i gdzie klauzul w tej samej kwerendy (wizualne Narzędzia bazy danych)

W niektórych przypadkach może zaistnieć potrzeba wykluczenia poszczególnych wierszy z grup (stosowanie klauzula WHERE) przed zastosowaniem warunku względem wszystkich grup (stosowanie 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 klauzula WHERE odnosi się do poszczególnych wierszy.Kwerenda może zawierać zarówno gdzie klauzula i HAVING klauzula.W takim przypadek:

  • Klauzula WHERE jest stosowany najpierw do poszczególnych wierszy w tabelach lub wartościami przechowywanymi w tabela obiektów w okienku Diagram.Grupowane są tylko wiersze spełniające warunki określone w klauzula WHERE.

  • Klauzula HAVING jest następnie stosowana do wierszy zestaw wyników.Tylko grupy spełniające klauzuli HAVING warunki są wyświetlane w wynikach kwerendy.Klauzula HAVING można zastosować tylko do kolumn, które również są wyświetlane w grupy według klauzuli lub w funkcja agregująca.

Załóżmy, że użytkownik łączącej titles i publishers tabele do utworzenia kwerendy wyświetlającej średnią cenę książek dla zestaw wydawców.Aby wyświetlić średnią cenę dla określonego zestaw wydawców — prawdopodobnie tylko wydawców w stanie Kalifornia.A nawet wówczas chcesz wyświetlić średnią cenę tylko wtedy, gdy jest ponad niż 10,00 zł.

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

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 częścią klauzula HAVING.Można jednak zmienić tego warunku WHERE na klauzula.

GDZIE można utworzyć klauzula i HAVING klauzula dotyczące tej samej kolumna.Aby to zrobić, należy dwukrotnie dodać kolumna w okienku kryteriów następnie określić jedno jej wystąpienie jako część klauzula HAVING, a drugie wystąpienie jako część klauzula WHERE.

Aby określić warunek WHERE wzapytanie agregujące

  1. Określ grupy dla kwerendy.Aby uzyskać szczegółowe informacje, zobacz Jak Grupowanie wierszy w wynikach kwerendy (wizualne Narzędzia bazy danych).

  2. Jeśli nie jest już w okienku kryteriów, należy dodać kolumna warunek WHERE.

  3. Wyczyść produkcji kolumny, chyba że kolumna danych jest częścią klauzula GROUP BY lub uwzględnionych w funkcja agregująca.

  4. W filtru kolumna, określ warunek WHERE.Kwerendy i widoku Projektant dodaje warunek do klauzula HAVING w instrukcja języka SQL.

    Ostrzeżenie

    Kwerendy, jak w przykładzie powoduje sprzężenie dwóch tabel, 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 Grupy przez kolumna, zaznacz gdzie z listy opcji grupowania i sumowania.Kwerendy i projektanta widoku usuwa warunek z klauzula HAVING w instrukcja języka SQL i dodaje je do klauzula WHERE.

    instrukcja języka SQL zmiany obejmują WHERE klauzula zamiast:

    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