09 December 2016

SQL Group By ve Having

Bir önceki notlarımda SQL fonksiyonlarından (SUM, MIN, MAX, AVG, COUNT) bahsetmiştim. Bu yazıda “GROUP BY” ve “HAVING” kullanımını ele alacağım.

Group By (yani gruplandır) yardımcı sözcüğü kayıtları bir alana göre gruplandırmak için kullanılır.

Genel yazılımı aşağıdaki şekildedir

Select DISTINCT|ALL sütun(lar) from Tablo(lar)
where sart(lar)
group by sütun(lar)

Örnek

select ShipCountry, COUNT(*) as toplam from orders
where ShipCountry LIKE 'a%'
group by ShipCountry
order by toplam desc

Having gruplandırma yaparken sorguda bir koşulun da verilmesi gerekiyorsa devreye girer. Kullanılan “HAVING” yardımcı kelimesi “GROUP BY” ile gruplanan kayıtlar üzerinde kısıtlama yapar.

Genel kullanımı aşağıdaki şekildedir

Select DISTINCT|ALL sütun(lar) from Tablo(lar)
where sart(lar)
group by sütun(lar)
having grup_kisitlamasi

HAVING Kullanma Kuralları

  1. Select komutunda GROUP BY yoksa HAVING geçersiz olur.
  2. HAVING sözcüğünü izleyen ifade içinde SUM, MIN, MAX, AVG, COUNT fonksiyonlarından en az biri mutlaka olmalıdır.
  3. HAVING sözcüğü sadece ve sadece gruplanmış verilerin işlemleri için geçerlidir.
  4. WHERE ile birlikte bir Select komutu içinde kullanılabilir.

WHERE ve HAVING arasındaki fark:

WHERE bir tablonun tek satırları üzerinde işlem yapan koşullar içinde geçerlidir. HAVING gruplanmış verilerin işlemleri için geçerlidir.

Örnek:

select ShipCountry, COUNT(*) as toplam from orders
where ShipCountry LIKE 'B%'
group by ShipCountry
having COUNT(*)>50
order by toplam desc