İçeriğe geç

SQL · 7/8

Gruplama ve özet analizler: GROUP BY & COUNT

Tablodaki satırları ortak özelliklere göre gruplayarak COUNT, SUM, AVG gibi toplu hesaplamalar yapmak.

Önerilen çalışma: 25–45 dakika; örnekleri kendin uygula. Süre kişiye göre değişir.

Bu sayfada · 9 başlık

Başlamadan önce

Önceki dersteki örneği çalıştırmış olman ve dosya/çıktı ayrımını biliyor olman yararlı.

Öğrenme sırası: konuyu oku → çıktıyı tahmin et → örneği değiştir → alıştırmayı çöz → cevabını gerekçelendir.

SQL · Gruplama ve özet analizler: GROUP BY & COUNT — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.

Videoyla adım adım izle

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Gruplama ve özet analizler: GROUP BY & COUNT

Tablodaki satırları ortak özelliklere göre gruplayarak COUNT, SUM, AVG gibi toplu hesaplamalar yapmak.

Kavramı kur

Tek tek satırları okumak yerine "Hangi bölümde kaç çalışan var?", "Toplam ciro ne kadar?" veya "Kategori bazında ortalama fiyat nedir?" gibi sorular için toplama (aggregate) fonksiyonları kullanılır.

Neden böyle çalışıyor?

GROUP BY, belirtilen sütundaki aynı değerlere sahip satırları tek bir grupta toplar. COUNT(*) gruptaki satır sayısını, SUM(sutun) toplamını, AVG(sutun) ortalamasını, MAX/MIN ise en büyük/en küçük değeri verir.

Çalışma sırası

AS sözcüğü ile hesaplanan yeni değere takma ad (alias) vererek sonuç tablosunda sütun başlığını anlaşılır kılabilirsin: COUNT(*) AS kisi_sayisi.

İkinci örnek · 1

FROM calisanlar tablosu taranır. Kodun tamamı yazılı derste bulunur.

Kod

SELECT bolum, COUNT(*) AS kisi_sayisi
FROM calisanlar
GROUP BY bolum;

Beklenen sonucu oku

Sonuçta her bölüm ve karşısındaki kişi sayısı listelenir.

Beklenen çıktı: bolum | kisi_sayisi Yazılım | 2 Tasarım | 1 Pazarlama | 1

Bir değeri sen değiştir

Her bölümün ortalama maaşını (AVG(maas)) hesaplayan sorgu yaz. Tüm şirketteki toplam maaş giderini hesaplamak için GROUP BY olmadan SUM(maas) çalıştır.

Hata nereden gelir?

SELECT listesinde toplama fonksiyonu olmayan sütunları GROUP BY içine eklemeyi unutmak hataya yol açar.

Kendi çözümünü kur

Her bölümdeki en yüksek maaşı MAX(maas) ile bul. Ortalama için AVG(maas), takma ad için AS ortalama_maas yaz.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

SELECT bolum, AVG(maas) AS ortalama_maas
FROM calisanlar
GROUP BY bolum;

Kendini kontrol et

GROUP BY bolum sorgusunda SELECT ad, bolum, COUNT(*) yazılırsa ne sorun oluşabilir? Yanıt: ad sütunu gruplanmadığı ve toplama fonksiyonuna alınmadığı için hangi çalışanın adının basılacağı belirsizdir; SQL motoru hata verir.

Beklenen çıktı: bolum | ortalama_maas Yazılım | 61500 Tasarım | 52000 Pazarlama | 48000

Konu anlatımı

Tek tek satırları okumak yerine "Hangi bölümde kaç çalışan var?", "Toplam ciro ne kadar?" veya "Kategori bazında ortalama fiyat nedir?" gibi sorular için toplama (aggregate) fonksiyonları kullanılır.

GROUP BY, belirtilen sütundaki aynı değerlere sahip satırları tek bir grupta toplar. COUNT(*) gruptaki satır sayısını, SUM(sutun) toplamını, AVG(sutun) ortalamasını, MAX/MIN ise en büyük/en küçük değeri verir.

AS sözcüğü ile hesaplanan yeni değere takma ad (alias) vererek sonuç tablosunda sütun başlığını anlaşılır kılabilirsin: COUNT(*) AS kisi_sayisi.

İlk örneği oku ve dene

7

Gruplama ve özet analizler: GROUP BY & COUNT

Birden çok satırı belirli bir sütuna göre gruplamak için GROUP BY kullanılır. COUNT satır sayısını, SUM toplamı, AVG ortalamayı verir.

SQL
SELECT bolum, COUNT(*) AS kisi_sayisi
FROM calisanlar
GROUP BY bolum;

▶ Sonuç

bolum | kisi_sayisi
Yazılım | 2
Tasarım | 1

Adım adım neden böyle çalışıyor?

  1. FROM calisanlar tablosu taranır.
  2. GROUP BY bolum satırları bölüm değerlerine göre kümelere ayırır.
  3. COUNT(*) her kümenin kaç satırdan oluştuğunu sayar.
  4. Sonuçta her bölüm ve karşısındaki kişi sayısı listelenir.
107

İkinci çözümlü örnek

Tablodaki satırları ortak özelliklere göre gruplayarak COUNT, SUM, AVG gibi toplu hesaplamalar yapmak.

SQL
SELECT bolum, COUNT(*) AS kisi_sayisi
FROM calisanlar
GROUP BY bolum;

▶ Sonuç

bolum | kisi_sayisi
Yazılım | 2
Tasarım | 1
Pazarlama | 1

Kolaydan zora sen dene

  1. Her bölümün ortalama maaşını (AVG(maas)) hesaplayan sorgu yaz.
  2. Tüm şirketteki toplam maaş giderini hesaplamak için GROUP BY olmadan SUM(maas) çalıştır.
  3. Her bölümdeki en yüksek maaşı MAX(maas) ile bul.
İpucunu aç

Ortalama için AVG(maas), takma ad için AS ortalama_maas yaz.

Üç görevin açıklamalı çözümünü oku
  1. SELECT bolum, AVG(maas) AS ort_maas FROM calisanlar GROUP BY bolum; ortalama maaşı verir.
  2. GROUP BY olmadan SUM(maas) tüm tablodaki genel toplamı döndürür.
  3. MAX(maas) her bölümdeki tavan maaşı hesaplar.
Bir çözüm varyasyonu gör
207

Çözüm varyasyonu

Önce kendi görevlerini dene. Bu varyasyonda girdi ve sonuçları karşılaştır.

SQL
SELECT bolum, AVG(maas) AS ortalama_maas
FROM calisanlar
GROUP BY bolum;

▶ Sonuç

bolum | ortalama_maas
Yazılım | 61500
Tasarım | 52000
Pazarlama | 48000

Yaygın hata ve çözümü

  1. SELECT listesinde toplama fonksiyonu olmayan sütunları GROUP BY içine eklemeyi unutmak hataya yol açar.
  2. COUNT(sutun) NULL değerleri saymaz, COUNT(*) tüm satırları sayar.

Kendini değerlendir

Satır sayısını hesaplayan SQL fonksiyonu hangisidir?

Ezberlemeden açıklayabiliyor musun?

GROUP BY bolum sorgusunda SELECT ad, bolum, COUNT(*) yazılırsa ne sorun oluşabilir?

Açıklamalı yanıt

ad sütunu gruplanmadığı ve toplama fonksiyonuna alınmadığı için hangi çalışanın adının basılacağı belirsizdir; SQL motoru hata verir.

Kendi çözümünde bir girdiyi değiştir. Çalıştırmadan önce beklenen sonucu yaz; gerçek sonuçla karşılaştır ve fark varsa hangi satırdan kaynaklandığını açıkla.

Kaynak ve çalışma ortamı

Örnekler küçük öğretim senaryolarıdır. Java/C#/PHP/Swift çalışma ortamını kendi cihazında ayrıca doğrula; yazılı sonuçlar beklenen davranışı açıklar.

Resmî dil belgeleri
Bu içerik işine yaradı mı?

Görüşünü aşağıdan işaretleyebilir ve varsa notunu bırakabilirsin.