Filtrování skupin pomocí FUNKCE HAVING

Dokončeno

Po vytvoření skupin pomocí klauzule GROUP BY můžete výsledky dále filtrovat. Klauzule HAVING funguje jako filtr pro skupiny. Podobá se tomu, jak klauzule WHERE funguje jako filtr řádků vrácených klauzulí FROM.

Klauzule HAVING umožňuje vytvořit podmínku hledání, která je koncepčně podobná predikátu klauzule WHERE, která pak testuje každou skupinu vrácenou klauzulí GROUP BY.

Následující příklad spočítá objednávky pro každého zákazníka a vyfiltruje výsledky tak, aby zahrnoval pouze zákazníky, kteří zadali více než 10 objednávek:

SELECT CustomerID,
      COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;

Porovnání FUNKCE HAVING s WHERE

I když klauzule HAVING i WHERE filtrují data, mějte na paměti, že WHERE pracuje s řádky vrácené klauzulí FROM. Pokud SESKUPÍ PODLE ... Oddíl HAVING existuje v dotazu podle klauzule WHERE, klauzule WHERE vyfiltruje řádky před zpracováním group BY – potenciálně omezí skupiny, které lze vytvořit.

Klauzule HAVING se zpracovává po group BY a pracuje pouze se skupinami, nikoli s řádky podrobností. Shrnutí:

  • Klauzule WHERE filtruje řádky před vytvořením všech skupin.
  • Klauzule HAVING filtruje celé skupiny a obvykle se dívá na výsledky agregace.