SQL Server’da bazı kayıtlar ortak bilgiler içerebilir. Örneğin her bir sınıftaki öğrencilerin ortalama puanları, yaş ortalamaları, en yüksek ve en düşük puanlar, her sınıftaki öğrenci sayısı gibi istatistiksel bilgiler elde edilmek istenebilir. Bu gibi işlemlerde GROUP BY ile gruplandırma yapılması gerekmektedir.
Genel kullanım şekli aşağıdaki gibidir. GROUP BY kullanırken gruplama yapılan alanların SELECT deyiminden sonra yazılarak listelenmesi mantıklı bir yaklaşımdır. Aksi halde fonksiyon ile gelen sonuçların hangi verilere ait olduğu anlaşılmayacaktır.
1 2 3 4 5 | SELECT alan1,alan2,fonksiyon(alan3), fonksiyon(alan4), … FROM tablo_adi WHERE sartlar GROUP BY alan1, alan2 ORDER BY alanlar |
Gruplandırma işlemlerini daha iyi örnekleyebilmek için normalizasyon kurallarına uymayan aşağıdaki personel tablosu ile çalışılmıştır. Personel tablosunun oluşturma ve veri girişi kodlarına Personel Tablosu Örneği başlıklı yazıdan ulaşabilirsiniz.
Örneğin, şirkette tüm çalışanların aldığı en yüksek ve en düşük maaşları listelemek istediğimizde aşağıdaki kod tablo için çalışacaktır.
1 | SELECT MAX(maas) AS 'En Yüksek Maaş', MIN(maas) AS 'En Düşük Maaş' FROM personel; |
Ancak her birimin ayrı ayrı en yüksek ve en düşük maaşlarını görmek için GROUP BY kullanılması gerekmektedir.
1 2 | SELECT birim, MAX(maas) AS 'En Yüksek Maaş', MIN(maas) AS 'En Düşük Maaş' FROM personel GROUP BY birim; |
Her birimde ödenen toplam maaşı ve maaş ortalamasını birim adına göre artan sırada listeleyin.
1 2 | SELECT birim, SUM(maas) AS 'Toplam Maaş', AVG(maas) AS 'Ortalama Maaş' FROM personel GROUP BY birim ORDER BY birim; |
veya
1 2 | SELECT birim, SUM(maas) AS 'Toplam Maaş', AVG(maas) AS 'Ortalama Maaş' FROM personel GROUP BY birim ORDER BY 1; |
Her birimdeki maaşı 2000’den yüksek olan personellerin sayısını listeleyin. Personel sayısına göre en yüksekten en düşüğe göre sıralı olacaktır.
1 2 | SELECT birim, COUNT(*) AS 'Personel Sayısı' FROM personel WHERE maas>2000 GROUP BY birim ORDER BY 2 DESC; |
Birden fazla alana göre de gruplama yapılabilir. Örneğin, her birimdeki kadın ve erkek çalışan sayılarını listeleyin.
1 2 | SELECT birim, cinsiyet, COUNT(*) AS 'Personel Sayısı' FROM personel GROUP BY birim, cinsiyet ORDER BY birim, cinsiyet; |
One Comment on “SQL Server – Gruplandırma (GROUP BY)”