Filtrare grupuri cu HAVING
Atunci când ați creat grupuri cu o clauză GROUP BY, puteți filtra și mai mult rezultatele. Clauza HAVING acționează ca filtru pentru grupuri. Aceasta este similară cu modul în care clauza WHERE acționează ca filtru pe rândurile returnate de clauza FROM.
O clauză HAVING vă permite să creați o condiție de căutare, similară conceptual cu predicatul unei clauze WHERE, care testează apoi fiecare grup returnat de clauza GROUP BY.
Următorul exemplu contorizează comenzile pentru fiecare client și filtrează rezultatele pentru a include doar clienții care au plasat mai mult de 10 comenzi:
SELECT CustomerID,
COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;
Comparație între HAVING și WHERE
Deși atât clauzele HAVING, cât și CELE WHERE filtrează datele, rețineți că WHERE funcționează pe rândurile returnate de clauza FROM. Dacă un GRUPARE DUPĂ ... Secțiunea HAVING există în interogarea dvs. după o clauză WHERE, clauza WHERE va filtra rânduri înainte ca GROUP BY să fie procesată, limitând posibil grupurile care pot fi create.
O clauză HAVING este procesată după GROUP BY și funcționează doar pe grupuri, nu pe rânduri de detalii. Pentru a rezuma:
- O clauză WHERE filtrează rândurile înainte ca toate grupurile să fie formate
- O clauză HAVING filtrează grupuri întregi și, de obicei, analizează rezultatele unei agregări.