Klauzula HAVING w funkcjach agregujących SQL

W tym samouczku omówimy kilka sposobów wykorzystania lub wykonania klauzuli HAVING w funkcjach agregujących SQL . Użycie tej klauzuli w funkcjach agregujących SQL może znacznie pomóc w podsumowaniu danych.

Klauzula HAVING jest prawie podobna do instrukcji WHERE i może być również wykonywana razem z nią.

Omówimy ich korelacje i różnice, podając przykłady podczas korzystania z tego samouczka.

Spis treści

Instrukcje GROUP BY i WHERE w języku SQL

W naszym pierwszym przykładzie omówimy, jak wykonać klauzulę WHERE i GROUP BY, korzystając z poniższej przykładowej tabeli. Należy pamiętać, że klauzuli WHERE możemy używać tylko z istniejącymi kolumnami, a nie tylko w funkcjach agregujących.

Klauzula HAVING w funkcjach agregujących SQL

Załóżmy, że chcemy uzyskać łączną sprzedaż produktu na podstawie jego kolumny SaleAmount , w której wartość jest większa niż 2 . Aby uzyskać wynik, nasze polecenie powinno brzmieć następująco:

Klauzula HAVING w funkcjach agregujących SQL

Najpierw wybieramy ProductName i agregujemy SaleAmount , aby uzyskać TotalSales

Klauzula HAVING w funkcjach agregujących SQL

Następnie użyliśmy tutaj instrukcji WHERE , ponieważ próbujemy pobrać tylko te produkty, których SaleAmount jest większa niż 2. Polecenie „GROUP BY ProductName” wskazuje, że zgrupuje wiersze w kolumnie ProductName w jeden.

Wykonując nasz zestaw poleceń, zobaczymy, że spośród wszystkich danych w kolumnach ProductName i SaleAmount wyświetlane były tylko Bulb i Fan . To dlatego, że jako jedyni mieli wartość SaleAmount większą niż 2.

Klauzula HAVING w funkcjach agregujących SQL

W tym przykładzie instrukcja WHERE służy do filtrowania wyników z istniejącą kolumną, którą jest nasza SaleAmount . Należy również zauważyć, że instrukcja WHERE pojawia się przed instrukcją GROUP BY i nie można jej używać do filtrowania funkcji agregujących. Z drugiej strony klauzula HAVING pojawia się po GROUP BY i służy do filtrowania na podstawie funkcji agregującej. 

Klauzula GROUP BY i HAVING w języku SQL

W tym przykładzie zademonstrujemy różnicę między instrukcją WHERE a klauzulą ​​HAVING . Użyjemy tego samego celu, co w poprzednim przykładzie, abyśmy mogli porównać i ocenić wyniki. 

Najpierw wyświetlmy produkty z ich całkowitą sprzedażą za pomocą poniższego polecenia. Jak widać, nasze pierwsze polecenie jest nadal takie samo, jak nasze pierwsze polecenie wykonujące instrukcję WHERE .

Klauzula HAVING w funkcjach agregujących SQL

Jeśli mamy wykonać nasze pierwsze dwa polecenia, otrzymamy następujący wynik:

Klauzula HAVING w funkcjach agregujących SQL

Załóżmy teraz, że chcemy wyświetlić tylko produkty, których łączna sprzedaż przekracza 5. Nie możemy użyć instrukcji WHERE  , ponieważ można jej używać tylko z istniejącymi kolumnami. Dlatego musimy użyć klauzuli HAVING , ponieważ będziemy filtrować z funkcji agregującej. 

Klauzula HAVING w funkcjach agregujących SQL

Zwróć uwagę, jak używamy klauzuli HAVING po GROUP BY , w przeciwieństwie do instrukcji WHERE używanej przed GROUP BY. Wynika to z faktu, że SQL zgrupuje rekordy przed oceną klauzuli HAVING

Następnie wykonajmy te polecenia wraz z HAVING SUM(SaleAmount)>5 . Po określeniu, że chcemy otrzymać tylko te produkty, których łączna cena jest większa niż 5, zauważymy, że w naszej aktualnej tabeli wyników nie zobaczymy już Pióra . To dlatego, że jego suma jest mniejsza niż 5

Klauzula HAVING w funkcjach agregujących SQL

Krótko mówiąc, gdy chcemy filtrować dane z naszej tabeli na podstawie istniejącej kolumny, używamy klauzuli WHERE , natomiast gdy chcemy filtrować dane z funkcji agregującej, używamy klauzuli HAVING

Klauzula HAVING and WHERE w SQL Server Management Studio (SSMS)

Teraz przejdziemy do przodu, omawiając i demonstrując, w jaki sposób możemy wykonać klauzulę HAVING w SQL Server Management Studio (SSMS). Zajmiemy się również różnicą między klauzulą ​​HAVING a klauzulą ​​WHERE , podając przykłady.

Poniżej pokazano nasze przykładowe dane SalesOrderHeader. Te dane składają się ze 100 wierszy. W naszym przykładzie chcemy uzyskać TotalSale według CustomerID , gdzie TotalSale jest większy niż 10000 . Należy zauważyć, że łączna sprzedaż jest oparta na sumie wartości kolumn TotalDue .

Klauzula HAVING w funkcjach agregujących SQL

Najpierw pozwól mi zademonstrować, dlaczego nie możemy użyć klauzuli WHERE , gdy chcemy filtrować funkcję agregującą w oparciu o nasz przykład powyżej. 

Będziemy używać przykładowego zestawu poleceń z obrazka poniżej. Jak widać, technicznie mamy ten sam zestaw poleceń, co w naszym pierwszym przykładzie.

Jednak gdy klikniemy Wykonaj w lewym górnym rogu, spowoduje to błąd, ponieważ nie możemy użyć samej klauzuli WHERE podczas filtrowania funkcji agregującej.

Klauzula HAVING w funkcjach agregujących SQL

Aby poprawić błąd, musimy przefiltrować wynik, używając klauzuli HAVING zamiast klauzuli WHERE . Nasz nowy zestaw poleceń powinien być podobny do poniższego obrazka.

Klauzula HAVING w funkcjach agregujących SQL

Teraz widzimy, że nasz błąd został poprawiony i zawiera wyniki na CustomerID z TotalSale większym niż 10000 .

Ponownie, klauzula WHERE jest zawsze używana przed klauzulą ​​GROUP BY , podczas gdy klauzula HAVING jest zawsze używana po klauzuli GROUP BY .

Używanie zarówno klauzuli HAVING, jak i klauzuli WHERE w języku SQL  

W tym przykładzie załóżmy, że chcemy jednocześnie użyć klauzuli WHERE i HAVING . Spróbujmy uzyskać TotalSale według CustomerID , gdzie TotalSale jest większy niż 10000 , ale tylko z klientami, których TerritoryID jest równy 1

Ponieważ chcemy filtrować wyniki według klientów, których identyfikatorem terytorium jest 1 , użyjemy klauzuli WHERE. Więc nasze polecenie powinno być takie samo jak nasze poprzednie. Ponownie dodaliśmy klauzulę WHERE przed klauzulą ​​GROUP BY.

Klauzula HAVING w funkcjach agregujących SQL

Na razie nie widzimy dużej różnicy między naszym poprzednim wynikiem a tym nowym. Jeśli jednak przyjrzysz się uważnie prawemu dolnemu rogowi, mamy teraz tylko 64 wiersze w porównaniu do poprzedniego z 505 wierszami danych. To dlatego, że wyniki są filtrowane również na podstawie ich identyfikatora terytorium .

Wniosek

Podsumowując, klauzuli WHERE możemy używać tylko z istniejącymi kolumnami. Jeśli musimy filtrować za pomocą funkcji agregowanych, musimy zamiast tego użyć klauzuli HAVING .

Używanie klauzuli HAVING w funkcjach agregujących SQL i ćwiczenie sposobów jednoczesnego wykonywania klauzuli HAVING i klauzuli WHERE może zapewnić użytkownikom wygodę podczas pracy z dużą liczbą danych lub rekordów. 

Mam nadzieję, że dostarczyłem ci wystarczających informacji i zrozumienia, jak używać klauzuli HAVING w funkcjach agregujących SQL. Jeśli chcesz dowiedzieć się więcej na ten temat i inne powiązane treści, z pewnością możesz sprawdzić listę odpowiednich linków poniżej.

Wszystkiego najlepszego,

Hafiz

Leave a Comment

Dodawaj, usuwaj i zmieniaj nazwy kolumn w R za pomocą Dplyr

Dodawaj, usuwaj i zmieniaj nazwy kolumn w R za pomocą Dplyr

W tym samouczku omówimy pakiet dplyr, który umożliwia sortowanie, filtrowanie, dodawanie i zmianę nazw kolumn w języku R.

Funkcje zbierania w Microsoft Power Automate

Funkcje zbierania w Microsoft Power Automate

Odkryj różnorodne funkcje zbierania, które można wykorzystać w Power Automate. Zdobądź praktyczne informacje o funkcjach tablicowych i ich zastosowaniu.

Oceń wydajność kodu DAX w DAX Studio

Oceń wydajność kodu DAX w DAX Studio

Z tego samouczka dowiesz się, jak ocenić wydajność kodów DAX przy użyciu opcji Uruchom test porównawczy w DAX Studio.

Czym jest self w Pythonie: przykłady z życia wzięte

Czym jest self w Pythonie: przykłady z życia wzięte

Czym jest self w Pythonie: przykłady z życia wzięte

Jak zapisać i załadować plik RDS w R

Jak zapisać i załadować plik RDS w R

Dowiesz się, jak zapisywać i ładować obiekty z pliku .rds w R. Ten blog będzie również omawiał sposób importowania obiektów z R do LuckyTemplates.

Powrót do pierwszych N dni roboczych — rozwiązanie języka kodowania DAX

Powrót do pierwszych N dni roboczych — rozwiązanie języka kodowania DAX

Z tego samouczka języka kodowania DAX dowiesz się, jak używać funkcji GENERUJ i jak dynamicznie zmieniać tytuł miary.

Zaprezentuj spostrzeżenia przy użyciu wielowątkowej techniki dynamicznych wizualizacji w usłudze LuckyTemplates

Zaprezentuj spostrzeżenia przy użyciu wielowątkowej techniki dynamicznych wizualizacji w usłudze LuckyTemplates

W tym samouczku omówiono sposób korzystania z techniki wielowątkowych wizualizacji dynamicznych w celu tworzenia szczegółowych informacji na podstawie dynamicznych wizualizacji danych w raportach.

Wprowadzenie do filtrowania kontekstu w usłudze LuckyTemplates

Wprowadzenie do filtrowania kontekstu w usłudze LuckyTemplates

W tym artykule omówię kontekst filtra. Kontekst filtrowania to jeden z głównych tematów, z którym każdy użytkownik usługi LuckyTemplates powinien zapoznać się na początku.

Najlepsze wskazówki dotyczące korzystania z aplikacji w usłudze online LuckyTemplates

Najlepsze wskazówki dotyczące korzystania z aplikacji w usłudze online LuckyTemplates

Chcę pokazać, jak usługa online LuckyTemplates Apps może pomóc w zarządzaniu różnymi raportami i spostrzeżeniami generowanymi z różnych źródeł.

Analizuj zmiany marży zysku w godzinach nadliczbowych — Analizuj za pomocą LuckyTemplates i DAX

Analizuj zmiany marży zysku w godzinach nadliczbowych — Analizuj za pomocą LuckyTemplates i DAX

Dowiedz się, jak obliczyć zmiany marży zysku przy użyciu technik, takich jak rozgałęzianie miar i łączenie formuł języka DAX w usłudze LuckyTemplates.