# PostgreSQL’de Kümülatif Toplam Hesaplama: Adım Adım Rehber
PostgreSQL veritabanınızda, zaman içindeki satışları, günlük aktif kullanıcıları veya herhangi bir metrikteki kümülatif toplamı hesaplamanız mı gerekiyor? Bu makale, PostgreSQL’de kümülatif toplam hesaplamanın temelinden ileri düzey tekniklerine kadar adım adım bir rehber sunuyor. Örnekler ve performans optimizasyon ipuçlarıyla dolu bu rehber, hem yeni başlayanlar hem de uzmanlar için faydalı olacaktır.
Öğrenme Yol Haritası
Bu rehber, PostgreSQL’de kümülatif toplam hesaplamayı öğrenme yolculuğunuza rehberlik edecek şekilde tasarlanmıştır. Üç farklı seviyede ilerleyeceğiz:
* Yeni Başlayan: Temel SQL fonksiyonları ve basit kümülatif toplam hesaplamaları.
* Orta Seviye: Gerçek dünya senaryoları, pencere fonksiyonlarının kullanımı ve optimizasyon teknikleri.
* İleri Seviye: Karmaşık sorgular, performans analizi ve sınır durumlarının ele alınması.
1. PostgreSQL’de Kümülatif Toplam: Temel Kavramlar
Kümülatif toplam (veya running total), bir veri kümesindeki değerlerin bir önceki değerlere eklenmesiyle oluşan toplamlardır. Örneğin, günlük satış verileriniz varsa, kümülatif toplam, her günün satışlarının o güne kadarki tüm satışların toplamını gösterir. Bu, verilerin zaman içindeki gelişimini anlamak için oldukça faydalıdır. PostgreSQL’de bu işlemi, çoğunlukla SUM() fonksiyonu ile birlikte pencere fonksiyonları kullanarak gerçekleştiririz. Pencere fonksiyonları, bir veri kümesinin bir alt kümesinde (pencere) işlemler yapmamızı sağlar.
2. Nasıl Yapılır? Yeni Başlayanlar İçin Adım Adım Kümülatif Toplam Hesaplama
Öncelikle basit bir örnek üzerinden gidelim. Bir satislar adlı tablomuz olsun ve bu tabloda tarih ve miktar sütunları bulunsun:
CREATE TABLE satislar (
tarih DATE,
miktar INTEGER
);
INSERT INTO satislar (tarih, miktar) VALUES
('2024-01-01', 10),
('2024-01-02', 15),
('2024-01-03', 20),
('2024-01-04', 25);
Şimdi, her gün için kümülatif toplamı hesaplayalım:
SELECT
tarih,
miktar,
SUM(miktar) OVER (ORDER BY tarih) as kumulatif_toplam
FROM
satislar;
Bu sorgu, SUM(miktar) OVER (ORDER BY tarih) kısmıyla kümülatif toplamı hesaplar. OVER (ORDER BY tarih) kısmı, pencere fonksiyonunun tarih sütununa göre sıralanmasını sağlar. Sonuç, her gün için o güne kadarki toplam satış miktarını gösterir.
3. Gerçek Dünya Örneği: Bir E-Ticaret Sitesinin Günlük Sipariş Toplamları
Bir e-ticaret sitesinin günlük sipariş toplamlarını hesaplayalım. siparisler adlı bir tablomuz olsun ve bu tabloda siparis_tarihi, musteri_id ve siparis_tutari sütunları bulunsun. Amacımız, her gün için toplam sipariş tutarının kümülatif toplamını hesaplamaktır.
SELECT
siparis_tarihi,
SUM(siparis_tutari) as gunluk_toplam,
SUM(SUM(siparis_tutari)) OVER (ORDER BY siparis_tarihi) as kumulatif_toplam
FROM
siparisler
GROUP BY
siparis_tarihi
ORDER BY
siparis_tarihi;
Bu sorgu öncelikle her gün için toplam sipariş tutarını hesaplar (GROUP BY kullanarak) ve daha sonra bu günlük toplamların kümülatif toplamını hesaplar.
4. Performans Optimizasyonu İpuçları
Büyük veri kümeleriyle çalışırken, performans optimizasyonu çok önemlidir. İşte bazı ipuçları:
* İndeksler: tarih sütununa bir indeks eklemek, sorgunun performansını önemli ölçüde artırabilir.
* PARTITIONING: Büyük tabloları tarih gibi bir sütuna göre partitionlamak, sorguları daha hızlı hale getirebilir.
* Sadeleştirilmiş Sorgular: Gereksiz sütunları seçmekten kaçının.
* Materyalize Görünümler: Sık kullanılan kümülatif toplam sorguları için materyalize görünümler oluşturmak performansı artırabilir. Ancak, materyalize görünümlerin güncelliğini korumak için ek maliyetler de göz önünde bulundurulmalıdır.
5. İleri Düzey Teknikler: Karmaşık Sorgular ve Sınır Durumları
Bazen daha karmaşık sorgulara ihtiyaç duyabilirsiniz. Örneğin, farklı ürün kategorilerine göre kümülatif toplam hesaplamak isteyebilirsiniz. Bu durumda, PARTITION BY kullanarak pencere fonksiyonunu farklı kategoriler için ayrı ayrı çalıştırabilirsiniz:
SELECT
kategori,
tarih,
miktar,
SUM(miktar) OVER (PARTITION BY kategori ORDER BY tarih) as kumulatif_toplam
FROM
urun_satislari;
Bu sorgu, her kategori için ayrı bir kümülatif toplam hesaplar.
6. Performans Analizi ve İyileştirme
PostgreSQL’in sunduğu EXPLAIN komutu ile sorgularınızın performansını analiz edebilirsiniz. EXPLAIN komutu, sorgunun nasıl yürütüldüğünü gösteren bir plan üretir. Bu planı inceleyerek, sorgunuzun performansını iyileştirmek için adımlar atabilirsiniz. Örneğin, indeks eksikliği veya yanlış bir sorgu planı tespit edebilirsiniz. Daha detaylı performans analizi için, PostgreSQL’in sunduğu diğer araçları da kullanabilirsiniz.
7. Gerçek Hayat Senaryoları ve Vaka Çalışmaları
* Finansal Analiz: Hisselerin zaman içindeki performansını takip etmek için kümülatif getiri hesaplamak.
* Web Analitiği: Web sitesine gelen günlük ziyaretçilerin kümülatif toplamını hesaplamak.
* Üretim: Bir fabrikadaki günlük üretim miktarlarının kümülatif toplamını hesaplamak.
* Lojistik: Teslimatların zaman içindeki kümülatif toplamını takip etmek.
8. PostgreSQL Kümülatif Toplam: Sıkça Sorulan Sorular (SSS)
* Pencere fonksiyonları nedir ve neden kullanılır? Pencere fonksiyonları, bir veri kümesinin bir alt kümesinde (pencere) işlemler yapmamızı sağlar. Kümülatif toplam hesaplamak için idealdir.
* OVER kuralı ne işe yarar? OVER kuralı, pencere fonksiyonunun nasıl çalışacağını tanımlar. ORDER BY ve PARTITION BY gibi kısımları içerir.
* Kümülatif toplam hesaplamanın performansını nasıl iyileştirebilirim? İndeksler, partitioning ve materyalize görünümler kullanarak performansı artırabilirsiniz.
* Büyük veri kümeleri için en iyi uygulama nedir? Büyük veri kümeleri için partitioning ve materyalize görünümler kullanmak önemlidir. Ayrıca, sorgularınızı optimize etmek için EXPLAIN komutunu kullanın.
* Farklı sütunlara göre kümülatif toplam nasıl hesaplanır? PARTITION BY kuralını kullanarak farklı sütunlara göre kümülatif toplam hesaplayabilirsiniz.
Sonuç
PostgreSQL’de kümülatif toplam hesaplama, verilerinizden anlamlı içgörüler çıkarmak için güçlü bir araçtır. Bu makalede, temel kavramlardan ileri düzey tekniklere kadar geniş bir yelpazede bilgi sunuldu. Veri analizinde daha fazla ilerlemek için, [fatihsoysal.com](https://fatihsoysal.com) adresini ziyaret edebilirsiniz.
Yazar: Fatih Soysal