# PostgreSQL’de Bir Sütündaki Her Değerin Oluş Sayısını Nasıl Sayabiliriz?
PostgreSQL veritabanınızda bir sütündaki her değerin kaç kez tekrarlandığını bilmek istiyorsunuz, değil mi? Bu, satış verilerinizde en çok satılan ürünü bulmak, müşteri davranışlarını analiz etmek veya web sitenizde en popüler sayfayı tespit etmek gibi birçok senaryoda hayati önem taşıyor. Bu makale, PostgreSQL’de bu işlemi nasıl yapacağınızı, yeni başlayanlardan uzman seviyesine kadar adım adım açıklayacak. Veritabanı sorgulamalarınızın performansını artırmak için ipuçları ve gerçek dünya örnekleriyle dolu bu rehber, PostgreSQL yeteneklerinizi bir üst seviyeye taşımanıza yardımcı olacak.
Öğrenme Yol Haritası
Bu rehber, PostgreSQL’de sütun değerlerinin oluş sayısını sayma konusunda üç farklı seviyeye ayrılmış bir öğrenme yol haritası sunmaktadır:
Yeni Başlayan: Temel SQL komutlarını kullanarak basit bir tabloda değerlerin sayımını yapmayı öğreneceğiz.
Orta Seviye: Gerçek dünya senaryolarını ele alacak, daha karmaşık sorgular yazmayı ve performans optimizasyonu tekniklerini öğreneceğiz.
İleri Seviye: Performans analizini derinlemesine inceleyeceğiz, büyük veri kümeleri için optimizasyon stratejileri geliştireceğiz ve nadir görülen durumları (edge caseler) ele alacağız.
Temel Kavramlar: COUNT, GROUP BY ve HAVING
PostgreSQL’de bir sütündaki her değerin oluş sayısını saymak için temel olarak COUNT, GROUP BY ve HAVING fonksiyonlarını kullanırız.
* COUNT(*): Tablodaki tüm satırları sayar.
* COUNT(column_name): Belirtilen sütündaki NULL olmayan değerlerin sayısını sayar.
* GROUP BY column_name: Verileri, belirtilen sütündaki benzersiz değerlere göre gruplar.
* HAVING condition: GROUP BY ile oluşturulan grupları filtrelemek için kullanılır. WHERE ile farklı olarak, gruplar üzerinde filtreleme yapar.
PostgreSQL’de Değer Oluş Sayımını Yapma: Adım Adım Uygulama
Öncelikle, örnek olarak kullanacağımız bir tablo oluşturalım:
CREATE TABLE urun_satislari (
urun_adi VARCHAR(255),
satis_miktari INTEGER
);
INSERT INTO urun_satislari (urun_adi, satis_miktari) VALUES
('Elma', 10),
('Armut', 5),
('Elma', 12),
('Muz', 8),
('Armut', 7),
('Elma', 15),
('Muz', 11);
Yeni Başlayan:
Şimdi, urun_adi sütunundaki her ürünün kaç kez satıldığını sayalım:
SELECT urun_adi, COUNT(*) AS satis_sayisi
FROM urun_satislari
GROUP BY urun_adi;
Bu sorgu, urun_adi sütununa göre gruplandırılmış verileri getirir ve her grup için COUNT(*) fonksiyonu ile satır sayısını (yani, her ürünün satış sayısını) hesaplar. AS satis_sayisi ise bu sayıya bir isim verir.
Orta Seviye:
Şimdi, gerçek hayattan bir senaryo ele alalım. Bir e-ticaret sitesinin ürün satış verilerini ele alalım ve sadece 5’ten fazla satılan ürünleri listeleyelim:
SELECT urun_adi, COUNT(*) AS satis_sayisi
FROM urun_satislari
GROUP BY urun_adi
HAVING COUNT(*) > 5;
Bu sorgu, HAVING kullanarak sadece satış sayısı 5’ten fazla olan ürünleri filtreler. Bu, WHERE kullanarak yapılamazdı çünkü WHERE satırları filtrelerken, HAVING grupları filtreler.
Performans Optimizasyonu: İndeksler ve Büyük Veri Kümeleri
Büyük veri kümeleri için sorguların performansını optimize etmek çok önemlidir. Bunun için indeksleme önemli bir rol oynar. urun_adi sütununa bir indeks eklemek sorguların daha hızlı çalışmasını sağlar:
CREATE INDEX urun_adi_index ON urun_satislari (urun_adi);
Ayrıca, EXPLAIN ANALYZE komutu ile sorguların performansını analiz edebilir ve optimizasyon imkanlarını değerlendirebilirsiniz. Bu komut, sorgunun nasıl yürütüldüğünü ve ne kadar sürdüğünü gösterir. [fatihsoysal.com](https://fatihsoysal.com) adresinden PostgreSQL performans optimizasyonu üzerine daha fazla bilgi edinebilirsiniz.
İleri Seviye: Edge Case’ler ve Karmaşık Sorgular
Bazı durumlarda, NULL değerlerle veya daha karmaşık koşullarla karşılaşabilirsiniz. Örneğin, urun_adi sütununda NULL değerler varsa ve bunların da sayılmasını istiyorsanız, COUNT(urun_adi) yerine COUNT(*) kullanmanız gerekir. COUNT(urun_adi) NULL değerleri saymaz.
Karmaşık sorgular için, alt sorgular veya ortak tablo ifadeleri (CTE – Common Table Expressions) kullanabilirsiniz. Örneğin, farklı kategorilere ait ürünlerin satış sayılarını hesaplamak için alt sorgular kullanabilirsiniz.
Gerçek Dünya Senaryoları: Vaka Analizleri
Senaryo 1: Web Sitesi Log Analizi: Bir web sitesinin günlük dosyalarını (loglarını) içeren bir veritabanı tablosu düşünün. sayfa_yolu sütununu kullanarak her sayfanın kaç kez ziyaret edildiğini sayabilirsiniz. Bu, en popüler sayfaları belirlemenize ve sitenizi iyileştirmenize yardımcı olur.
Senaryo 2: Müşteri Davranış Analizi: Bir e-ticaret sitesinin müşteri verilerini içeren bir tabloda, urun_kategorisi sütununu kullanarak her kategoriye ait kaç sipariş verildiğini sayabilirsiniz. Bu, en popüler ürün kategorilerini belirlemenize ve pazarlama stratejilerinizi geliştirmenize yardımcı olur.
Senaryo 3: Sosyal Medya Analizi: Sosyal medya verilerini içeren bir tabloda, hashtag sütununu kullanarak her hashtag’in kaç kez kullanıldığını sayabilirsiniz. Bu, en popüler hashtag’leri belirlemenize ve sosyal medya stratejinizi optimize etmenize yardımcı olur.
Sonuç
Bu makale, PostgreSQL’de bir sütündaki her değerin oluş sayısını saymanın farklı yollarını, yeni başlayan seviyesinden ileri seviyeye kadar adım adım açıkladı. Performans optimizasyonu teknikleri ve gerçek dünya örnekleriyle zenginleştirilen bu rehber, PostgreSQL yeteneklerinizi geliştirmenize yardımcı olacaktır. Unutmayın ki, büyük veri kümeleri için indeksleme ve EXPLAIN ANALYZE komutu kullanımı çok önemlidir.
Sıkça Sorulan Sorular (SSS):
1. GROUP BY ve HAVING arasındaki fark nedir? GROUP BY, verileri gruplar; HAVING, gruplar üzerinde filtreleme yapar. WHERE ise satırları filtreler.
2. NULL değerleri nasıl ele alabilirim? COUNT(*), NULL değerleri de sayar. COUNT(column_name) ise NULL değerleri saymaz.
3. Çoklu sütunlarda gruplama nasıl yapılır? GROUP BY cümlesinde virgülle ayırarak birden fazla sütun belirleyebilirsiniz.
4. Sorguların performansını nasıl iyileştirebilirim? İndeksleme, sorgu optimizasyonu ve EXPLAIN ANALYZE komutu kullanımı performansı artırır.
5. Daha karmaşık sorgular için hangi teknikleri kullanabilirim? Alt sorgular ve CTE’ler (Common Table Expressions) karmaşık sorguları daha okunabilir ve yönetilebilir hale getirir.
Yazar: Fatih Soysal