Udostępnij za pośrednictwem


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

  1. Określ grupy dla swojej kwerendy.Aby uzyskać szczegółowe informacje, zobacz Jak: grupowanie wierszy w wynikach kwerendy.

  2. Jeśli nie jest on jeszcze w okienku kryteriów, należy dodać kolumny, na którym chcesz oprzeć warunku WHERE.

  3. Wyczyść produkcji kolumny, chyba że kolumna danych jest częścią klauzuli GROUP BY lub w funkcji agregującej.

  4. 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'
    
  5. 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
    

Zobacz też

Inne zasoby

Sortowanie i grupowanie wyników kwerendy

Podsumowanie wyników kwerendy