HAVING ile grupları filtreleme
GROUP BY yan tümcesi olan gruplar oluşturduğunuzda sonuçları daha fazla filtreleyebilirsiniz. HAVING koşulu, gruplar üzerinde bir filtre işlevi görür. Bu, WHERE yan tümcesinin FROM yan tümcesi tarafından döndürülen satırlarda filtre işlevi gördüğü yönteme benzer.
HAVING yan tümcesi, kavramsal olarak WHERE yan tümcesinin koşuluna benzer bir arama koşulu oluşturmanıza olanak tanır. Bu koşul, GROUP BY yan tümcesi tarafından döndürülen her grubu test eder.
Aşağıdaki örnek, her müşteri için siparişleri sayar ve sonuçları yalnızca 10'dan fazla sipariş vermiş müşterileri içerecek şekilde filtreler:
SELECT CustomerID,
COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;
HAVING ile WHERE karşılaştırması
Hem HAVING hem de WHERE yan tümceleri verileri filtrelese de WHERE'un FROM yan tümcesi tarafından döndürülen satırlarda çalıştığını unutmayın. Sorgunuzda WHERE yan tümcesinin ardından bir GROUP BY ... HAVING bölümü varsa, WHERE yan tümcesi, gruplandırmadan önce satırları filtreleyerek oluşturulabilecek grupları sınırlandırabilir.
HAVING yan tümcesi GROUP BY işleminden sonra işlenir ve ayrıntı satırları yerine yalnızca gruplar üzerinde çalışır. Özetlemek gerekirse:
- WHERE yan tümcesi, herhangi bir grup oluşturulmadan önce satırları filtreler
- HAVING yan tümcesi grupların tamamını filtreler ve genellikle bir birleştirmenin sonuçlarına bakar.