# PostgreSQL’de WHERE ile Toplama Fonksiyonları Kullanımı
PostgreSQL veritabanınızda karmaşık sorgulamalar yapmanız ve verileri özetlemeniz gerekiyorsa, toplama fonksiyonlarını WHERE koşullarıyla birlikte kullanmanız kaçınılmazdır. Örneğin, belirli bir tarih aralığında yapılan toplam satışları hesaplamak veya belirli bir şehirdeki müşterilerin ortalama yaşını bulmak gibi işlemler için bu teknik hayati önem taşır. Bu makale, PostgreSQL’de toplama fonksiyonlarını WHERE koşullarıyla nasıl etkili ve verimli bir şekilde kullanacağınızı adım adım açıklayacaktır. PostgreSQL’in güçlü özelliklerini kullanarak verilerinizi analiz etmeyi ve anlamlı sonuçlar elde etmeyi öğreneceksiniz.
Öğrenme Yol Haritası
Bu makale, PostgreSQL’de toplama fonksiyonlarını WHERE ile kullanma konusunda yeni başlayanlardan ileri seviye kullanıcılara kadar herkese hitap edecek şekilde tasarlanmıştır. Aşağıdaki adımları izleyerek konuyu adım adım öğrenebilirsiniz:
Yeni Başlayan: Basit SELECT sorguları ve temel toplama fonksiyonları (SUM, AVG, COUNT, MIN, MAX) ile başlayıp, bunları basit WHERE koşullarıyla birleştireceğiz.
Orta Seviye: Gerçek dünya senaryolarına dayalı örneklerle, daha karmaşık WHERE koşulları ve birden fazla toplama fonksiyonunun aynı sorgu içinde kullanımı ele alınacaktır. Sorgu optimizasyonu ipuçları da verilecektir.
İleri Seviye: Performans analizi teknikleri, karmaşık alt sorguların kullanımı ve potansiyel performans darboğazlarının nasıl tespit edilip çözüleceği incelenecektir. Nadir görülen durumlar (edge cases) ve bunların nasıl ele alınacağı üzerinde duracağız.
PostgreSQL’de Temel Toplama Fonksiyonları
PostgreSQL, verileri özetlemek için birçok güçlü toplama fonksiyonu sunar. En yaygın kullanılanları şunlardır:
* SUM(): Belirtilen sütunun değerlerinin toplamını hesaplar. Sayısal sütunlar için kullanılır.
* AVG(): Belirtilen sütunun değerlerinin ortalamasını hesaplar. Sayısal sütunlar için kullanılır.
* COUNT(): Belirtilen sütun veya satır sayısını hesaplar. COUNT(*) tüm satırları sayar, COUNT(sütun_adı) ise NULL olmayan değerleri sayar.
* MIN(): Belirtilen sütunun en küçük değerini bulur.
* MAX(): Belirtilen sütunun en büyük değerini bulur.
WHERE Koşullarıyla Toplama Fonksiyonlarını Birleştirme: Yeni Başlayanlar İçin
Şimdi, basit bir örnek ile başlayalım. urunler adında bir tablo olduğunu ve bu tablonun urun_adi, fiyat ve kategori sütunlarını içerdiğini varsayalım. “Elektronik” kategorisindeki ürünlerin toplam fiyatını hesaplamak için aşağıdaki sorguyu kullanabiliriz:
SELECT SUM(fiyat) AS toplam_fiyat
FROM urunler
WHERE kategori = 'Elektronik';
Bu sorgu, urunler tablosundan kategori sütunu ‘Elektronik’ olan satırları seçer ve bu satırlardaki fiyat sütunlarının toplamını hesaplar. AS toplam_fiyat ifadesi, sonuç sütununa anlamlı bir isim verir.
Gerçek Hayatta Toplama Fonksiyonları ve WHERE Koşulları: Orta Seviye
Bir e-ticaret şirketinin veritabanını ele alalım. siparisler adında bir tablo olsun ve bu tabloda siparis_tarihi, musteri_id, toplam_tutar gibi sütunlar bulunsun. Şirket, 2023 yılının Ocak ayı için toplam ciroyu ve ortalama sipariş tutarını öğrenmek istiyor. Bu sorgu şu şekilde yazılabilir:
SELECT
SUM(toplam_tutar) AS toplam_ciro,
AVG(toplam_tutar) AS ortalama_siparis_tutari
FROM siparisler
WHERE siparis_tarihi BETWEEN '2023-01-01' AND '2023-01-31';
Bu sorgu, iki farklı toplama fonksiyonunu aynı anda kullanır ve WHERE koşulu ile belirli bir tarih aralığını filtreler. Bu örnek, gerçek hayatta karşılaşılabilecek daha karmaşık sorgulama senaryolarına iyi bir örnektir. Optimizasyon ipucu: siparis_tarihi sütununa bir indeks eklemek, sorgunun performansını önemli ölçüde artırabilir.
Karmaşık Sorgular ve Alt Sorgular: İleri Seviye
Şimdi daha karmaşık bir senaryo ele alalım. musteriler adında bir tablomuz olsun ve bu tabloda musteri_id, sehir, yas gibi sütunlar bulunsun. “İstanbul” şehrinde yaşayan müşterilerin ortalama yaşını, ancak sadece 30 yaşından büyük müşterileri dikkate alarak hesaplamak istiyoruz. Bunun için alt sorgu kullanabiliriz:
SELECT AVG(yas) AS ortalama_yas
FROM (
SELECT yas
FROM musteriler
WHERE sehir = 'İstanbul' AND yas > 30
) AS istanbul_musterileri;
Bu sorgu, öncelikle İstanbul şehrinde yaşayan ve 30 yaşından büyük müşterilerin yaşlarını seçen bir alt sorgu kullanır. Daha sonra, bu alt sorgunun sonucunda elde edilen yaşların ortalamasını hesaplar. Edge Case: Eğer “İstanbul” şehrinde 30 yaşından büyük hiçbir müşteri yoksa, AVG() fonksiyonu NULL döndürecektir. Bu durumu kontrol etmek ve uygun bir değer döndürmek için COALESCE() fonksiyonunu kullanabiliriz:
SELECT COALESCE(AVG(yas), 0) AS ortalama_yas -- NULL ise 0 döndürür
FROM (
SELECT yas
FROM musteriler
WHERE sehir = 'İstanbul' AND yas > 30
) AS istanbul_musterileri;
Performans Analizi: Karmaşık sorguların performansını analiz etmek için EXPLAIN komutunu kullanabilirsiniz. EXPLAIN SELECT ... komutu, sorgunun nasıl yürütüleceğini gösteren bir plan sunar. Bu plan, sorgunun performansını iyileştirmek için indeksleme gibi optimizasyon stratejileri belirlemenize yardımcı olur.
Performans Optimizasyonu
PostgreSQL’de toplama fonksiyonları ve WHERE koşullarını kullanırken performansı optimize etmek için birkaç önemli strateji vardır:
* İndeksleme: Sıkça filtreleme yapılan sütunlara indeks eklemek, sorguların daha hızlı çalışmasını sağlar.
* WHERE koşullarını optimize etme: Gereksiz koşullardan kaçının ve koşulları en etkili şekilde düzenleyin.
* Alt sorguları optimize etme: Alt sorgular performansı olumsuz etkileyebilir. Mümkünse, alt sorgular yerine JOIN işlemleri kullanmayı deneyin.
* Veri tiplerini doğru seçme: Uygun veri tipleri seçmek, depolama alanını ve sorgu performansını iyileştirebilir.
* Analizler: PostgreSQL’in ANALYZE komutu, istatistiksel bilgileri günceller ve sorgu planlayıcısının daha iyi kararlar vermesine yardımcı olur.
GROUP BY ile Toplama Fonksiyonları
Toplama fonksiyonlarını GROUP BY cümleciği ile birleştirerek, verileri gruplara ayırarak her grup için ayrı toplama işlemleri yapabilirsiniz. Örneğin, her kategori için ürün sayısını hesaplamak için:
SELECT kategori, COUNT(*) AS urun_sayisi
FROM urunler
GROUP BY kategori;
Sonuç
PostgreSQL’de toplama fonksiyonlarını WHERE koşullarıyla birlikte kullanmak, verileri analiz etmek ve özetlemek için güçlü bir araçtır. Bu makalede, temel kavramlardan ileri düzey tekniklere kadar geniş bir yelpazede bilgi verildi. Uygulama örnekleri ve optimizasyon ipuçları ile verilerinizi daha etkili bir şekilde analiz edebilirsiniz. Daha fazla bilgi için [Fatih Soysal’ın bloguna](https://fatihsoysal.com) göz atabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. WHERE koşulunda NULL değerleri nasıl ele alabilirim? IS NULL veya IS NOT NULL koşullarını kullanabilirsiniz.
2. Birden fazla WHERE koşulu nasıl kullanabilirim? AND veya OR mantık operatörlerini kullanarak birden fazla koşul belirleyebilirsiniz.
3. Toplama fonksiyonlarının döndürdüğü değerler NULL olabilir mi? Evet, eğer ilgili satır bulunmazsa veya toplama işlemi yapılacak veri yoksa NULL döndürebilirler. COALESCE() fonksiyonu ile bunu yönetebilirsiniz.
4. Performans sorunları yaşarsam ne yapmalıyım? EXPLAIN komutu ile sorgu planını inceleyin, indeksleri kontrol edin ve gerektiğinde sorguyu yeniden yazın.
5. GROUP BY ile HAVING cümleciğini nasıl kullanabilirim? HAVING cümleciği, GROUP BY ile oluşturulan gruplar üzerinde filtreleme yapmanızı sağlar.
Yazar: Fatih Soysal