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:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
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.
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:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
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:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
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:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
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:
Code language: SQL (Structured Query Language) (sql)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;
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