MySQL Select Group by- Kayıtların Gruplanması
Önceki yazımızda ifade ettiğimiz Distinct komutunun gelişmişi diyebiliriz.
select ….
from…[where]
GROUP BY alan1, alan2, …[HAVING kosul]
GROUP By
Sorgu sonucunda dönen kayıtların gruplanmasında kullanılır. Bu grubun içinde yer alan sayıyı, grubun adini, grup üzerinde şart koymayı sağlar.
Öncelikle tüm kayıtlarımızı görelim.
MariaDB [obs]> select * from ogrenci; +----------+--------+-----------+------------+------------+-----------+ | ogrNo | adi | soyadi | mobil | dtarihi | bolumu | +----------+--------+-----------+------------+------------+-----------+ | 03050095 | Ayşe | Güneş | NULL | 1998-03-01 | NULL | | 20220001 | Canan | Demirel | 5351234567 | 1940-03-10 | ASTRONOMI | | 22050917 | Murat | Sulupınar | NULL | NULL | NULL | | 75050917 | Temel | Demir | 5557779777 | 1989-01-28 | Fizik | | 91050075 | Gülçin | Demircan | 532100011 | NULL | NULL | | 91050099 | Yahya | Demircan | 532100010 | 2022-03-10 | Matematik | +----------+--------+-----------+------------+------------+-----------+ 6 rows in set (0.000 sec)
Şimdi bu veriler üzerinde gruplama yaparak konuyu anlamaya çalışalım.
Örnek: Soyadina göre gruplama yaparsak
MariaDB [obs]> select soyadi from ogrenci group by soyadi; +-----------+ | soyadi | +-----------+ | Demir | | Demircan | | Demirel | | Güneş | | Sulupınar | +-----------+ 5 rows in set (0.000 sec)
Bu sonucu MariaDB [obs]> select distinct soyadi from ogrenci; komutuyla da alabilirsiniz.
Peki bu kayıtların her birinden kaçar tane olduğunu bulmaya gelince GROUP BY işin içine girer.
MariaDB [obs]> select soyadi,count(*) from ogrenci group by soyadi; +-----------+----------+ | soyadi | count(*) | +-----------+----------+ | Demir | 1 | | Demircan | 2 | | Demirel | 1 | | Güneş | 1 | | Sulupınar | 1 | +-----------+----------+ 5 rows in set (0.001 sec)
Distinct ile bu sonuç alınamaz, count(Distinct soyadi) bize 5 sayısını verir.
HAVING koşul
Group by sonucu oluşan, kümeler üzerinde koşul yazmamıza yarar.
Bir önceki örnekte her bir soyadından kaçar tane olduğunu görmüştük. Bize aynı soyada sahip olanların sayısının 2 ve üstü gerekiyor diyelim
o zaman having kullanılır.
MariaDB [obs]> select soyadi,count(*) from ogrenci group by soyadi having count(*)>=2; +----------+----------+ | soyadi | count(*) | +----------+----------+ | Demircan | 2 | +----------+----------+ 1 row in set (0.000 sec)
Where ifadesi burada kullanılmaz, çünkü önce grupların oluşması gerekir. Select’in sırası dikkat edilirse
select … from … where…group by …having
önce where çalışır, sonra group by, sonra having işleme sokulur ve en son select …
Distinct ile Group by konusunun daha iyi anlaşılması için videomuzu izlemelisiniz.
Diğer videolar için tıklayınız.