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.

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.