Takip et

PostgreSQL: Gruplara Göre Ortalama Hesaplama

# PostgreSQL’de Gruplanmış Ortalama Hesaplama: Adım Adım Rehber

PostgreSQL veritabanınızda yüzlerce, binlerce hatta milyonlarca kayıt var ve bu kayıtları farklı kategorilere ayırarak her kategori için ortalama bir değer hesaplamanız gerekiyor. Örneğin, bir e-ticaret sitesinin ürün satışlarını illere göre ortalamasını hesaplamak, bir okulun öğrencilerinin not ortalamalarını sınıflara göre belirlemek veya bir şirketin çalışanlarının maaş ortalamalarını departmanlara göre görmek isteyebilirsiniz. İşte tam bu noktada PostgreSQL’in güçlü gruplama ve toplama fonksiyonları devreye giriyor. Bu makalede, PostgreSQL kullanarak gruplanmış ortalama hesaplamanın temellerinden ileri düzey tekniklerine kadar adım adım bir rehber sunacağız. PostgreSQL’de gruplanmış ortalamaları hesaplamanın çeşitli yöntemlerini, performans optimizasyonunu ve gerçek dünya senaryolarını ele alacağız.

Öğrenme Yol Haritası

Bu rehber, PostgreSQL’de gruplanmış ortalama hesaplamayı öğrenmek için üç seviyede ilerlemenizi sağlayacak şekilde tasarlanmıştır:

Yeni Başlayan: AVG() fonksiyonunun temel kullanımı, basit SQL sorguları ve adım adım açıklamalar.

Orta Seviye: Gerçek dünya senaryoları, GROUP BY cümlesinin daha gelişmiş kullanımları ve sorgu optimizasyonu teknikleri.

İleri Seviye: Performans analizi, karmaşık sorgular, WINDOW fonksiyonları ve edge case’ler (istisnai durumlar).

PostgreSQL’de Temel Kavramlar: AVG() ve GROUP BY

PostgreSQL’de gruplanmış ortalamaları hesaplamanın kalbi, AVG() ve GROUP BY cümlelerinde yatar. AVG(), belirtilen sütunun ortalamasını hesaplar. GROUP BY, verileri belirtilen sütunlara göre gruplar, böylece AVG() fonksiyonu her grup için ayrı bir ortalama hesaplar.

Örneğin, basit bir urunler tablomuz olduğunu varsayalım:

| urun_id | urun_adi | fiyat | kategori |
|—|—|—|—|
| 1 | Kitap | 25 | Kitap |
| 2 | Kalem | 5 | Kırtasiye |
| 3 | Defter | 10 | Kırtasiye |
| 4 | Roman | 30 | Kitap |
| 5 | Silgi | 3 | Kırtasiye |

Her kategori için ortalama fiyatı hesaplamak için aşağıdaki sorguyu kullanabiliriz:

SELECT kategori, AVG(fiyat) AS ortalama_fiyat
FROM urunler
GROUP BY kategori;

Bu sorgu, kategori sütununa göre gruplandırılmış veriler için her bir kategorinin ortalama fiyatını (ortalama_fiyat olarak adlandırılmış) hesaplar ve sonuçları gösterir.

Nasıl Yapılır? Adım Adım Uygulamalı Kılavuz

Şimdi, daha detaylı örneklerle AVG() ve GROUP BY kullanımını inceleyelim.

1. Basit Ortalama Hesaplama:

Öncelikle, basit bir ogrenciler tablomuz olsun:

| ogrenci_id | sinif | not |
|—|—|—|
| 1 | 9 | 85 |
| 2 | 9 | 70 |
| 3 | 10 | 92 |
| 4 | 10 | 88 |
| 5 | 9 | 95 |

Her sınıfın ortalama notunu hesaplamak için şu sorguyu kullanırız:

SELECT sinif, AVG(not) AS ortalama_not
FROM ogrenciler
GROUP BY sinif;

2. Birden Fazla Sütuna Göre Gruplandırma:

Eğer birden fazla sütuna göre gruplandırma yapmak istiyorsak, GROUP BY cümlesinde virgülle ayırarak bu sütunları listeleriz. Örneğin, hem sınıfa hem de cinsiyete göre ortalama notu hesaplamak için (cinsiyet sütunu ekleyerek):

SELECT sinif, cinsiyet, AVG(not) AS ortalama_not
FROM ogrenciler
GROUP BY sinif, cinsiyet;

3. Koşullu Ortalama Hesaplama:

WHERE cümlesi ile belirli koşullara uyan veriler üzerinde ortalama hesaplayabiliriz. Örneğin, sadece 9. sınıf öğrencilerinin ortalama notunu hesaplamak için:

SELECT AVG(not) AS ortalama_not_9
FROM ogrenciler
WHERE sinif = 9;

Gerçek Dünya Örnekleri ve Vaka Analizleri

Örnek 1: E-ticaret Satış Analizi:

Bir e-ticaret sitesi, her ürün kategorisi için ortalama satış fiyatını hesaplamak istiyor. satislar tablosunda urun_kategorisi ve satis_fiyati sütunları bulunmaktadır. Aşağıdaki sorgu bu ihtiyacı karşılar:

SELECT urun_kategorisi, AVG(satis_fiyati) AS ortalama_satis_fiyati
FROM satislar
GROUP BY urun_kategorisi
ORDER BY ortalama_satis_fiyati DESC;

Örnek 2: Personel Maaş Analizi:

Bir şirket, her departman için ortalama maaşı hesaplamak istiyor. personeller tablosunda departman ve maas sütunları bulunmaktadır. Aşağıdaki sorgu ile bu bilgiye ulaşabiliriz:

SELECT departman, AVG(maas) AS ortalama_maas
FROM personeller
GROUP BY departman
ORDER BY ortalama_maas ASC;

Performans Optimizasyonu

Büyük veri kümeleri üzerinde çalışırken sorgu performansı kritik öneme sahiptir. Performansı artırmak için aşağıdaki teknikleri kullanabiliriz:

* İndeksler: GROUP BY cümlesinde kullanılan sütunlara indeks eklemek sorgu performansını önemli ölçüde artırabilir.
* WHERE cümlesi: Gereksiz verilerin işlenmesini önlemek için WHERE cümlesini kullanarak filtreleme yapın.
* Fonksiyonel İndeksler: AVG(sutun_adi) gibi fonksiyonların sonuçlarını önbelleğe almak için fonksiyonel indeksler kullanabilirsiniz.
* Analiz: ANALYZE komutunu kullanarak veritabanı istatistiklerini güncelleyin. Bu, PostgreSQL’in sorgu planlayıcısının daha iyi kararlar vermesine yardımcı olur.

Daha detaylı performans optimizasyonu için [fatihsoysal.com](https://fatihsoysal.com) sitesini ziyaret edebilirsiniz. (Buraya performans optimizasyonu ile ilgili bir makaleye link verilebilir)

İleri Düzey Teknikler: WINDOW Fonksiyonları

WINDOW fonksiyonları, her satır için gruplanmış toplamlar hesaplamanıza olanak tanır. Bu, her satırı ilgili grubunun ortalamasıyla karşılaştırabilmenizi sağlar.

Örneğin, her öğrencinin notunun kendi sınıfındaki ortalamaya göre nasıl konumlandığını görmek için aşağıdaki sorguyu kullanabiliriz:

SELECT sinif, not, AVG(not) OVER (PARTITION BY sinif) AS sinif_ortalamasi
FROM ogrenciler
ORDER BY sinif, not;

Bu sorgu, her öğrenci için notunu ve sınıfının ortalama notunu gösterir.

Edge Case’ler ve İstisnai Durumlar

* NULL Değerler: AVG() fonksiyonu NULL değerleri dikkate almaz. NULL değerleri nasıl ele almak istediğinize bağlı olarak COALESCE() veya NULLIF() fonksiyonlarını kullanabilirsiniz.
* Boş Gruplar: Eğer bir grupta veri yoksa, AVG() fonksiyonu NULL değer döndürür. Bu durumu kontrol etmek için CASE ifadesi kullanabilirsiniz.

Sonuç

Bu makalede, PostgreSQL’de gruplanmış ortalamaları hesaplamanın temellerinden ileri düzey tekniklerine kadar çeşitli yöntemleri inceledik. Gerçek dünya senaryoları ve performans optimizasyonu teknikleri ile konuyu daha iyi anladığınızı umuyoruz. PostgreSQL’in güçlü araçlarını kullanarak verilerinizden daha fazla bilgi çıkarabilir ve daha etkili kararlar alabilirsiniz.

Sıkça Sorulan Sorular:

1. AVG() fonksiyonu NULL değerleri nasıl ele alır? AVG() fonksiyonu NULL değerleri dikkate almaz.
2. Birden fazla sütuna göre nasıl gruplandırma yapabilirim? GROUP BY cümlesinde virgülle ayırarak birden fazla sütun belirtin.
3. Koşullu ortalama hesaplama nasıl yapılır? WHERE cümlesini kullanarak filtreleme yapın.
4. Performansı nasıl artırabilirim? İndeksler kullanın, WHERE cümlesini optimize edin ve veritabanı istatistiklerini güncelleyin.
5. WINDOW fonksiyonları ne işe yarar? Her satır için gruplanmış toplamlar hesaplamaya olanak tanırlar.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version