Takip et

PostgreSQL: WHERE Kısmında SUM Kullanımı

# PostgreSQL’de SUM Fonksiyonunu WHERE Klauzuyla Nasıl Kullanırım?

PostgreSQL veritabanınızda toplama işlemleri yaparken, belirli koşulları sağlayan satırlardaki değerleri toplamanız gerekebilir. Bu noktada, SUM fonksiyonunu WHERE klauzuyla birlikte kullanmak oldukça önemlidir. Bu makalede, PostgreSQL’de SUM ve WHERE kullanımını adım adım, gerçek dünya örnekleriyle ve performans optimizasyon teknikleriyle ele alacağız. Veritabanı sorgulamalarınızda daha güçlü ve verimli olmanıza yardımcı olacak bu rehber, yeni başlayanlardan ileri seviye kullanıcılara kadar herkese hitap etmektedir.

PostgreSQL’de SUM ve WHERE: Temel Kavramlar

SUM fonksiyonu, belirtilen sütündaki sayısal değerlerin toplamını hesaplar. WHERE klauzu ise, SUM fonksiyonunun hangi satırlarda işlem yapacağını belirlemek için kullanılır. Basitçe, WHERE klauzu, SUM fonksiyonunun işlem yapacağı veri alt kümesini filtreler. Örneğin, bir ürün satış tablosunda, belirli bir tarih aralığındaki toplam satışları hesaplamak için SUM ve WHERE birlikte kullanılır.

Öncelikle, basit bir örnek üzerinden konuyu anlayalım. urunler adında bir tablo düşünelim:

| urun_id | urun_adi | fiyat | satis_adedi |
|—|—|—|—|
| 1 | Elma | 5 | 100 |
| 2 | Armut | 7 | 50 |
| 3 | Muz | 3 | 150 |
| 4 | Portakal | 4 | 80 |

Tüm ürünlerin toplam satış gelirini hesaplamak için şu sorguyu kullanabiliriz:

SELECT SUM(fiyat * satis_adedi) AS toplam_gelir FROM urunler;

Ancak, sadece elma ve armutun toplam satış gelirini hesaplamak istersek, WHERE klauzu devreye girer:

SELECT SUM(fiyat * satis_adedi) AS toplam_gelir FROM urunler WHERE urun_adi IN ('Elma', 'Armut');

SUM ve WHERE’i Kullanmanın Adım Adım Rehberi (Öğrenme Yol Haritası)

Yeni Başlayan:

Adım 1: Bir PostgreSQL veritabanı oluşturun ve örnek bir tablo ekleyin. Aşağıdaki kod, musteriler adlı bir tablo oluşturur ve bazı örnek veriler ekler:

CREATE TABLE musteriler (
    musteri_id SERIAL PRIMARY KEY,
    musteri_adi VARCHAR(255),
    siparis_tutari NUMERIC
);

INSERT INTO musteriler (musteri_adi, siparis_tutari) VALUES
('Ahmet', 100),
('Ayşe', 150),
('Mehmet', 200),
('Fatma', 120),
('Ali', 80);

Adım 2: musteriler tablosundaki tüm müşterilerin toplam sipariş tutarını hesaplayalım:

SELECT SUM(siparis_tutari) AS toplam_siparis_tutari FROM musteriler;

Adım 3: Sipariş tutarı 150 TL’den fazla olan müşterilerin toplam sipariş tutarını hesaplayalım:

SELECT SUM(siparis_tutari) AS toplam_siparis_tutari FROM musteriler WHERE siparis_tutari > 150;

Orta Seviye:

Gerçek Hayat Örneği: Bir e-ticaret sitesinin verilerini ele alalım. siparisler adlı bir tabloda, her siparişin tutarı ve sipariş tarihi bulunmaktadır. Eylül ayında yapılan toplam sipariş tutarını hesaplamak için:

SELECT SUM(siparis_tutari) AS toplam_eylul_satislari
FROM siparisler
WHERE siparis_tarihi BETWEEN '2024-09-01' AND '2024-09-30';

Optimizasyon İpuçları: Büyük veritabanlarında performansı artırmak için indeksleme çok önemlidir. siparis_tarihi sütununa bir indeks eklemek sorgu hızını önemli ölçüde artırabilir:

CREATE INDEX siparis_tarihi_index ON siparisler (siparis_tarihi);

İleri Seviye:

Performans Analizi: Karmaşık sorguların performansını analiz etmek için EXPLAIN ANALYZE komutunu kullanabiliriz. Bu komut, sorguyu çalıştırmadan önce nasıl yürütüleceğini ve ne kadar süreceğini gösterir. Örneğin:

EXPLAIN ANALYZE SELECT SUM(siparis_tutari) FROM siparisler WHERE siparis_tarihi BETWEEN '2024-09-01' AND '2024-09-30';

Edge Case’ler: NULL değerler SUM fonksiyonunu etkiler. NULL değerleri toplama işlemine dahil etmek istemiyorsanız, COALESCE fonksiyonunu kullanabilirsiniz:

SELECT SUM(COALESCE(siparis_tutari, 0)) AS toplam_siparis_tutari FROM siparisler;

Bu, siparis_tutari sütununda NULL olan satırların 0 olarak kabul edilmesini sağlar.

Karmaşık Durumlar ve Pratik Çözümler

Bazen, SUM fonksiyonunu WHERE klauzuyla birlikte kullanırken daha karmaşık koşullar tanımlamanız gerekebilir. Örneğin, birden fazla koşulu aynı anda değerlendirmeniz veya alt sorgular kullanmanız gerekebilir.

Örnek: Bir müşteri veritabanında, belirli bir şehirde yaşayan ve sipariş tutarı 100 TL’den fazla olan müşterilerin toplam sipariş tutarını bulmak isteyelim.

SELECT SUM(siparis_tutari) AS toplam_siparis
FROM musteriler
WHERE sehir = 'İstanbul' AND siparis_tutari > 100;

Bu örnekte, WHERE klauzu iki koşulu (sehir = 'İstanbul' ve siparis_tutari > 100) AND operatörüyle birleştirerek sadece bu koşulları sağlayan müşterilerin sipariş tutarlarının toplamını hesaplar.

Alt Sorgular: Daha karmaşık senaryolar için alt sorgular kullanabiliriz. Örneğin, belirli bir ürünü satan müşterilerin toplam sipariş tutarını hesaplamak için:

SELECT SUM(siparis_tutari)
FROM musteriler
WHERE musteri_id IN (SELECT musteri_id FROM siparisler WHERE urun_id = 123);

Performans Optimizasyonu

Büyük veri setlerinde SUM ve WHERE kombinasyonunun performansını optimize etmek için aşağıdaki ipuçlarını kullanabilirsiniz:

* İndeksler: WHERE klauzu içinde kullanılan sütunlara indeks eklemek, sorgu süresini önemli ölçüde azaltabilir.
* WHERE klauzu optimizasyonu: WHERE klauzu içinde gereksiz koşullar kullanmaktan kaçının. Koşulların sırasını optimize etmek de performansı etkileyebilir.
* Veri tipleri: Uygun veri tipleri kullanmak, veritabanı işlemlerinin daha hızlı yapılmasını sağlar.
* Sorgu planlaması: EXPLAIN komutunu kullanarak sorgu planını inceleyin ve performansı iyileştirmek için gerekli değişiklikleri yapın. ANALYZE ekleyerek gerçek çalışma süresini de inceleyebilirsiniz.
* Parçalama (Partitioning): Büyük tabloları parçalara ayırmak, belirli bir parçaya ait veriler üzerinde işlem yaparken performansı artırabilir.

Sonuç

PostgreSQL’de SUM fonksiyonunu WHERE klauzuyla birlikte kullanmak, veritabanı sorgulamalarınızın gücünü ve verimliliğini artırır. Bu makalede ele aldığımız örnekler ve optimizasyon teknikleri, farklı karmaşıklık seviyelerindeki sorgulamalarınızda size yardımcı olacaktır. Uygulamaya yönelik örnekler ve adım adım rehber ile, PostgreSQL yeteneklerinizi geliştirebilir ve daha karmaşık veritabanı analizleri yapabilirsiniz. Daha fazla bilgi ve ileri seviye PostgreSQL teknikleri için [fatihsoysal.com](https://fatihsoysal.com) adresini ziyaret edebilirsiniz.

Sıkça Sorulan Sorular:

1. SUM fonksiyonu NULL değerleri nasıl ele alır? SUM fonksiyonu NULL değerleri dikkate almaz. NULL değerleri dahil etmek için COALESCE fonksiyonu kullanılabilir.

2. WHERE klauzu içinde birden fazla koşul nasıl kullanılır? AND ve OR operatörleri kullanılarak birden fazla koşul birleştirilebilir.

3. SUM fonksiyonunun performansını nasıl optimize ederim? İndeksleme, WHERE klauzu optimizasyonu ve uygun veri tipleri kullanımı performansı artırır.

4. Büyük tablolar için performans nasıl iyileştirilir? Parçalama (partitioning) ve materyalize görünüm (materialized view) teknikleri kullanılabilir.

5. SUM fonksiyonu ile birlikte başka hangi fonksiyonlar kullanılabilir? AVG, COUNT, MIN, MAX gibi diğer agrega fonksiyonları ile birlikte kullanılabilir.

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

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.