Udostępnij za pomocą


Praca z kolumnami w zapytaniach agregacji (Visual Database Tools)

Dotyczy:programu SQL Server

Podczas tworzenia zagregowanych zapytań narzędzia Projektant zapytań i widoków (Visual Database Tools) przyjmuje pewne założenia, aby można było utworzyć prawidłowe zapytanie. Jeśli na przykład tworzysz zapytanie agregujące i oznaczysz kolumnę danych dla danych wyjściowych, projektant zapytań i widoków automatycznie tworzy część GROUP BY kolumny klauzuli, dzięki czemu nie próbujesz przypadkowo wyświetlić zawartości pojedynczego wiersza w podsumowaniu.

Użyj grupy według

Projektant zapytań i widoków używa następujących wskazówek dotyczących pracy z kolumnami:

  • Po wybraniu opcji Grupuj według lub dodaniu funkcji agregującej do zapytania wszystkie kolumny oznaczone jako dane wyjściowe lub używane do sortowania są automatycznie dodawane do klauzuli GROUP BY . Kolumny nie są automatycznie dodawane do klauzuli GROUP BY , jeśli są już częścią funkcji agregującej.

    Jeśli nie chcesz, aby określona kolumna była częścią GROUP BY klauzuli, musisz ją ręcznie zmienić, wybierając inną opcję w kolumnie Grupuj według w okienku Kryteria. Jednak projektant zapytań i widoków nie uniemożliwia wybrania opcji, która może spowodować uruchomienie zapytania.

  • Jeśli ręcznie dodasz kolumnę danych wyjściowych zapytania do funkcji agregującej w okienku Kryteria lub SQL, projektant zapytań i widoków nie usunie automatycznie innych kolumn wyjściowych z zapytania. W związku z tym należy usunąć pozostałe kolumny z danych wyjściowych zapytania lub uczynić je częścią GROUP BY klauzuli lub funkcji agregującej.

Po wprowadzeniu warunku wyszukiwania w kolumnie Filtr w okienku Kryteria, Projektant zapytań i widoków przestrzega następujących reguł:

  • Jeśli kolumna Grupuj według siatki nie jest wyświetlana (ponieważ nie określono jeszcze kwerendy agregującej), warunek wyszukiwania zostanie umieszczony w klauzuli WHERE .

  • Jeśli jesteś już w zagregowanym zapytaniu i wybrano opcję Gdzie w kolumnie Grupuj według, warunek wyszukiwania zostanie umieszczony w klauzuli WHERE .

  • Jeśli kolumna Grupuj według zawiera dowolną wartość inną niż Where, warunek wyszukiwania zostanie umieszczony w klauzuli HAVING .

Używanie klauzul HAVING i WHERE

Poniższe zasady opisują sposób odwoływanie się do kolumn w zagregowanym zapytaniu w warunkach wyszukiwania. Ogólnie rzecz biorąc, można użyć kolumny w warunku wyszukiwania, aby filtrować wiersze, które powinny zostać podsumowane (klauzula WHERE ) lub określić, które pogrupowane wyniki pojawiają się w końcowych danych wyjściowych (klauzula HAVING ).

  • Poszczególne kolumny danych mogą być wyświetlane w klauzuli WHERE lub HAVING w zależności od sposobu ich użycia w innym miejscu zapytania.

  • WHERE Klauzule służą do wybierania podzestawu wierszy do podsumowania i grupowania, a tym samym są stosowane przed zakończeniem grupowania. W związku z tym można użyć kolumny danych w WHERE klauzuli, nawet jeśli nie jest częścią GROUP BY klauzuli lub zawartej w funkcji agregującej. Na przykład poniższa instrukcja wybiera wszystkie tytuły, które kosztują ponad 10,00 USD, i oblicza średnią cenę.

    SELECT AVG(price)
    FROM titles
    WHERE price > 10;
    
  • Jeśli utworzysz warunek wyszukiwania, który obejmuje również kolumnę używaną GROUP BY w klauzuli lub funkcji agregującej, warunek wyszukiwania może pojawić się jako WHERE klauzula lub klauzula HAVING — możesz zdecydować, które podczas tworzenia warunku. Na przykład poniższa instrukcja tworzy średnią cenę tytułów dla każdego wydawcy, a następnie wyświetla średnią dla wydawców, w których średnia cena jest większa niż 10,00 USD:

    SELECT pub_id,
           AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10);
    
  • Jeśli używasz funkcji agregującej w warunku wyszukiwania, warunek obejmuje podsumowanie i dlatego musi być częścią klauzuli HAVING .