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 FROM
WHERE
SELECT
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