Csoportok szűrése a HAVING használatával

Befejeződött

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.