Podsumowanie: W tym poradniku dowiesz się jak używać klauzuli MySQL HAVING do określania warunków filtrowania dla grup wierszy lub agregatów.

Wprowadzenie do klauzuli MySQL HAVING

Klauzula HAVING jest używana w instrukcji SELECT w celu określenia warunków filtrowania dla grupy wierszy lub agregatów.

Klauzula HAVING jest często używana z klauzulą GROUP BY do filtrowania grup na podstawie określonego warunku. Jeśli klauzula GROUP BY jest pominięta, klauzula HAVING zachowuje się jak klauzula WHERE.

Poniżej przedstawiono składnię klauzuli HAVING:

SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
Code language: SQL (Structured Query Language) (sql)

W tej składni określasz warunek w klauzuli HAVING. Jeśli wiersz, który jest generowany przez klauzulę group by, spowoduje, że group_condition zostanie oceniony jako prawdziwy, zapytanie uwzględni go w zbiorze wyników.

Zauważ, że klauzula HAVING stosuje warunek filtrowania do każdej grupy wierszy, podczas gdy klauzula WHERE stosuje warunek filtrowania do każdego wiersza z osobna.

MySQL ocenia klauzulę HAVING po klauzulach FROMWHERESELECT i GROUP BY klauzulami oraz przed ORDER BY, i LIMIT klauzulami.

Zauważ, że standard SQL określa, że. klauzula HAVING jest obliczana przed klauzulą SELECT i po klauzuli GROUP BY.

Przykłady klauzuli MySQL HAVING

Poznajmy kilka przykładów użycia klauzuli HAVING, aby zobaczyć jak działa. Do demonstracji użyjemy tabeli orderdetails w przykładowej bazie danych.

Poniżej wykorzystujemy klauzulę GROUP BY do uzyskania numerów zamówień, liczbę przedmiotów sprzedanych na zamówienie oraz całkowitą sprzedaż dla każdego z nich z tabeli orderdetails:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Code language: SQL (Structured Query Language) (sql)

Try It Out

Teraz, możesz sprawdzić, które zamówienie ma całkowitą sprzedaż większą niż 1000 poprzez użycie klauzuli HAVING w następujący sposób:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Code language: SQL (Structured Query Language) (sql)

Try It Out

Możesz skonstruować m.in. warunek złożony w klauzuli HAVING używając operatorów logicznych takich jak OR i AND.

Poniższy przykład wykorzystuje klauzulę HAVING do znalezienia zamówień, które mają łączne kwoty większe niż 1000 i zawierają więcej niż 600 elementów:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Code language: SQL (Structured Query Language) (sql)

Try It Out

Załóżmy, że chcesz znaleźć wszystkie zamówienia, które są w statusie shipped i mają łączną kwotę większą niż 1500, możesz dołączyć do tabeli orderdetails z tabelą orders używając klauzuli INNER JOIN i zastosować warunek na kolumnie status oraz agregat total jak pokazano w poniższym zapytaniu:

SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Code language: SQL (Structured Query Language) (sql)

Try It Out

Kolumna HAVING Klauzula GROUP BY jest przydatna tylko wtedy, gdy używamy jej wraz z klauzulą GROUP BY do generowania danych wyjściowych raportów wysokiego poziomu.raportów wysokiego poziomu. Na przykład, możesz użyć klauzuli HAVING, aby odpowiedzieć na pytania takie jak znalezienie liczby zamówień w tym miesiącu, tym kwartale lub tym roku, które mają całkowitą sprzedaż większą niż 10K.

W tym poradniku dowiedziałeś się, jak używać klauzuli MySQL HAVING wraz z klauzulą GROUP BY w celu określenia warunków filtrowania dla grup wierszy lub agregatów.

  • Czy ten poradnik był pomocny?
  • TakNie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *