Csoportok szűrése a HAVING használatával
Ha csoportokat hozott létre GROUP BY záradékkal, tovább szűrheti az eredményeket. A HAVING záradék a csoportok szűrőjeként működik. Ez hasonló ahhoz, ahogyan a WHERE záradék szűrőként működik a FROM záradék által visszaadott sorokon.
A HAVING záradék lehetővé teszi a WHERE záradék predikátumához fogalmilag hasonló keresési feltétel létrehozását, amely ezután teszteli a GROUP BY záradék által visszaadott csoportokat.
Az alábbi példa megszámolja az egyes ügyfelek rendeléseit, és szűri az eredményeket, hogy csak a 10-nél több megrendelést leadó ügyfeleket tartalmazza:
SELECT CustomerID,
COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;
A HAVING és a WHERE összehasonlítása
Bár a HAVING és a WHERE záradék is szűri az adatokat, ne feledje, hogy a WHERE a FROM záradék által visszaadott sorokon működik. Ha a GROUP BY ... A HAVING szakasz egy WHERE záradékot követve létezik a lekérdezésben, a WHERE záradék szűrni fogja a sorokat a GROUP BY feldolgozása előtt – ami korlátozhatja a létrehozható csoportokat.
A HAVING záradék a GROUP BY után lesz feldolgozva, és csak csoportokon működik, nem pedig részletes sorokon. Összegezve:
- A WHERE záradék szűri a sorokat a csoportok létrehozása előtt
- A HAVING záradék a teljes csoportokat szűri, és általában egy összesítés eredményeit vizsgálja.