# PostgreSQL’de Birden Çok Sütunun Ortalamasını Hesaplama
PostgreSQL veritabanınızda birden fazla sayısal sütunun ortalamasını hesaplamak mı istiyorsunuz? Örneğin, bir öğrencinin farklı sınavlardaki notlarının ortalamasını veya bir ürünün farklı mağazalardaki satış rakamlarının ortalamasını hesaplamanız gerekebilir. Bu makalede, PostgreSQL’de bu işlemi adım adım nasıl yapacağınızı, farklı senaryoları ve performans optimizasyon tekniklerini ele alacağız. PostgreSQL’in güçlü fonksiyonlarını kullanarak verilerinizden anlamlı sonuçlar elde etmenize yardımcı olacağız.
Öğrenme Yol Haritası
Bu makale, PostgreSQL’de birden çok sütunun ortalamasını hesaplamayı adım adım öğretmek için üç seviyeye ayrılmıştır:
Yeni Başlayan: (Adım adım açıklama, Basit kod örneği)
Orta: (Gerçek hayat örneği, Optimizasyon ipuçları)
İleri Düzey: (Performans analizi, Edge caseler)
PostgreSQL Temelleri: Ortalama Hesaplama
PostgreSQL’de tek bir sütunun ortalamasını hesaplamak oldukça basittir. AVG() fonksiyonunu kullanırız. Örneğin, ogrenciler tablosunda matematik sütununun ortalamasını hesaplamak için şu sorguları kullanabiliriz:
SELECT AVG(matematik) AS matematik_ortalamasi FROM ogrenciler;
Bu sorgu, ogrenciler tablosundaki tüm öğrencilerin matematik notlarının ortalamasını hesaplar ve sonucu matematik_ortalamasi olarak adlandırır.
Birden Çok Sütunun Ortalamasını Hesaplama: Temel Teknikler
Birden fazla sütunun ortalamasını hesaplamak için birkaç yöntem kullanabiliriz. En basit yöntem, her sütun için ayrı bir AVG() fonksiyonu kullanmaktır. Örneğin, ogrenciler tablosunda matematik, fizik ve kimya notlarının ortalamasını hesaplamak için:
SELECT
AVG(matematik) AS matematik_ortalamasi,
AVG(fizik) AS fizik_ortalamasi,
AVG(kimya) AS kimya_ortalamasi
FROM ogrenciler;
Bu sorgu, her dersin ortalamasını ayrı ayrı hesaplayarak bize üç farklı sonuç verir. Ancak, tüm derslerin genel ortalamasını hesaplamak istiyorsak, daha karmaşık bir yaklaşım kullanmamız gerekir.
Birden Çok Sütunun Genel Ortalamasını Hesaplama: İleri Teknikler
Tüm derslerin genel ortalamasını hesaplamak için, önce her öğrencinin ders notlarının toplamını hesaplamamız, ardından bu toplamların ortalamasını almamız gerekir. Bunun için CASE ifadeleri veya daha gelişmiş SQL teknikleri kullanabiliriz. Öncelikle her öğrencinin toplam notunu hesaplayalım:
SELECT
ogrenci_id,
(matematik + fizik + kimya) AS toplam_not
FROM ogrenciler;
Daha sonra bu toplam notların ortalamasını alabiliriz:
SELECT AVG(toplam_not) AS genel_ortalama FROM (
SELECT (matematik + fizik + kimya) AS toplam_not FROM ogrenciler
) AS alt_sorgu;
Bu yaklaşım, önce bir alt sorgu kullanarak her öğrencinin toplam notunu hesaplar ve daha sonra bu toplam notların ortalamasını ana sorguda hesaplar. Daha okunaklı bir yöntem, COALESCE fonksiyonunu kullanarak NULL değerlerle başa çıkmaktır. Eğer bazı öğrencilerin bazı derslerde notu yoksa, COALESCE fonksiyonu bu değerleri 0 olarak kabul ederek doğru bir ortalama hesaplamayı sağlar.
SELECT AVG(COALESCE(matematik,0) + COALESCE(fizik,0) + COALESCE(kimya,0)) AS genel_ortalama FROM ogrenciler;
Gerçek Hayattan Örnek: Ürün Satış Ortalamaları
Bir e-ticaret şirketinde çalıştığınızı ve farklı şehirlerdeki satış rakamlarını analiz etmeniz gerektiğini varsayalım. Her şehir için farklı ürünlerin satış rakamları ayrı sütunlarda saklanıyor olsun. Bu durumda, yukarıdaki teknikleri kullanarak her şehrin genel ürün satış ortalamasını hesaplayabiliriz. Örneğin:
SELECT
sehir,
AVG(COALESCE(urun1,0) + COALESCE(urun2,0) + COALESCE(urun3,0)) AS ortalama_satis
FROM satislar
GROUP BY sehir;
Bu sorgu, her şehrin üç ürünün satış rakamlarının ortalamasını hesaplar ve NULL değerleri 0 olarak ele alır.
Performans Optimizasyonu: İpuçları ve Teknikler
Büyük veri kümeleriyle çalışırken, sorgu performansını optimize etmek önemlidir. Aşağıdaki ipuçları performansı artırmanıza yardımcı olabilir:
* İndexler: Sık kullanılan sütunlara index eklemek sorgu süresini önemli ölçüde azaltabilir.
* WHERE klauzu: Gerekli verileri filtrelemek için WHERE klauzu kullanın. Bu, işlenecek veri miktarını azaltarak performansı artırır.
* Alt sorguların optimizasyonu: Alt sorgular performansı etkileyebilir. Mümkünse, alt sorguları JOIN işlemleriyle değiştirmeyi deneyin.
* Analiz: EXPLAIN komutu ile sorgu planını analiz ederek performans darboğazlarını belirleyebilirsiniz.
İleri Düzey Konular: Edge Case’ler ve Karmaşık Senaryolar
Bazı durumlarda, ortalama hesaplama daha karmaşık olabilir. Örneğin, belirli bir koşulu sağlayan satırların ortalamasını hesaplamanız gerekebilir veya farklı ağırlıklarla ortalama hesaplamanız gerekebilir. Bu tür durumlarda, daha gelişmiş SQL fonksiyonları ve teknikleri kullanmanız gerekebilir. CASE ifadeleri, PARTITION BY klauzu ve pencere fonksiyonları bu gibi durumlarda yardımcı olabilir. Ayrıca, veritabanınızın yapısı ve verilerinizin özellikleri de performansı ve doğru sonucu elde etmeyi etkileyebilir.
Sonuç
PostgreSQL’de birden çok sütunun ortalamasını hesaplamak için çeşitli yöntemler mevcuttur. Basit durumlarda, her sütun için ayrı AVG() fonksiyonları kullanabilirsiniz. Daha karmaşık durumlarda, alt sorgular, COALESCE fonksiyonu ve diğer gelişmiş teknikleri kullanmanız gerekebilir. Performans optimizasyonu için indexler, WHERE klauzu ve sorgu planı analizi önemlidir. Bu makalede ele alınan teknikler, PostgreSQL veritabanınızdan en iyi şekilde yararlanmanıza ve verilerinizden anlamlı sonuçlar elde etmenize yardımcı olacaktır. Daha fazla bilgi için [fatihsoysal.com](https://fatihsoysal.com) adresini ziyaret edebilirsiniz.
Sıkça Sorulan Sorular:
1. NULL değerlerle nasıl başa çıkabilirim? COALESCE fonksiyonu NULL değerleri belirlediğiniz bir değerle (örneğin 0) değiştirebilir.
2. Ağırlıklı ortalama nasıl hesaplarım? SUM(sutun * agirlik) / SUM(agirlik) formülünü kullanarak ağırlıklı ortalama hesaplayabilirsiniz.
3. Çok büyük veri kümeleri için performansı nasıl optimize edebilirim? İndexler, WHERE klauzu ve sorgu planı optimizasyonu kullanın.
4. Farklı koşullara göre ortalama nasıl hesaplarım? CASE ifadeleri ve WHERE klauzu kullanarak farklı koşullara göre ortalama hesaplayabilirsiniz.
5. PostgreSQL’in sunduğu diğer ortalama hesaplama fonksiyonları var mı? AVG() fonksiyonunun yanı sıra, pencere fonksiyonları ve istatistiksel fonksiyonlar da ortalama hesaplamada kullanılabilir.
Yazar: Fatih Soysal