Jak: Użyj HAVING i gdzie klauzul w tej samej kwerendy.
W niektórych przypadkach można wykluczyć pojedynczych wierszy z grup (stosowanie klauzuli WHERE) przed zastosowaniem warunku względem wszystkich grup (stosowanie klauzuli HAVING).
Klauzula HAVING jest podobna do klauzuli WHERE, ale stosuje się tylko do grup jako całości (do wierszy w zestawie wyników reprezentujących grupy), dlatego klauzula WHERE odnosi się do poszczególnych wierszy.Kwerenda może zawierać zarówno klauzula WHERE i HAVING.W takim przypadku:
Klauzula WHERE jest najpierw stosowane do poszczególnych wierszy w tabelach lub wartościami przechowywanymi w tabeli obiektów w okienku Diagram.Grupowane są tylko wiersze, które spełniają warunki określone w klauzuli WHERE.
Następnie stosowana jest klauzula HAVING względem wierszy w zestawie wyników.Tylko grupy, które spełniają HAVING warunki są wyświetlane w wynikach kwerendy.Klauzula HAVING można zastosować tylko do kolumn, które również są wyświetlane w klauzuli GROUP BY lub w funkcji agregującej.
Załóżmy, że użytkownik łączącej titles i publishers tabele do utworzenia kwerendy wyświetlającej średnią cenę książek pochodzących od określonych wydawców.Chcesz wyświetlić średnią cenę dla określonego zestawu wydawcy — może tylko wydawcy w stanie Kalifornia.A nawet wówczas, do którego chcesz wyświetlić średnią cenę tylko wtedy, gdy jest ponad 10,00 zł.
Można ustanowić pierwszego warunku w klauzuli WHERE, która odrzuca wszelkie wydawcy, które nie są w stanie Kalifornia, przed obliczeniem średniej ceny.Drugi warunek wymaga klauzuli HAVING, ponieważ warunek jest na podstawie wyników grupowania i sumowania danych.Wynikowa instrukcja 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 w kolumnie, warunek ten jest uwzględniany jako część klauzuli HAVING.Można jednak zmienić tego warunku na klauzulę WHERE.
Można utworzyć klauzulę WHERE i HAVING korzystających z tej samej kolumnie.Aby to zrobić, należy dwukrotnie dodać kolumny w okienku kryteriów, następnie określić jedno jej wystąpienie jako część klauzuli HAVING, a drugie wystąpienie jako część klauzuli WHERE.
[!UWAGA]
Na danym komputerze mogą być używane inne nazwy lub lokalizacje pewnych elementów interfejsu użytkownika programu Visual Studio, które są używane w poniższych instrukcjach. Używana wersja programu Visual Studio oraz jej ustawienia określają te elementy. Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.
Aby określić warunek WHERE w kwerendzie agregującej
Określ grupy dla swojej kwerendy.Aby uzyskać szczegółowe informacje, zobacz Jak: grupowanie wierszy w wynikach kwerendy.
Jeśli nie jest on jeszcze w okienku kryteriów, należy dodać kolumny, na którym chcesz oprzeć warunku WHERE.
Wyczyść produkcji kolumny, chyba że kolumna danych jest częścią klauzuli GROUP BY lub w funkcji agregującej.
W filtru kolumny, określ warunek WHERE.Kwerendy i widoku Projektant dodaje warunek do klauzuli HAVING w instrukcji SQL.
[!UWAGA]
Kwerendy, przedstawiono w przykładzie powoduje sprzężenie dwóch tabel, titles i publishers.
W tym momencie w kwerendzie, instrukcja SQL zawiera klauzulę 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'
W Group By kolumny, zaznacz gdzie z listy opcji grupowania i sumowania.Kwerendy i widoku Projektant usunie ten warunek z klauzuli HAVING w instrukcji SQL i dodaje je do klauzuli WHERE.
Zmiany instrukcji 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