Aylara Göre Ürün Satışlarını Karşılaştıran SQL Sorgusu: Bir Rehber
Ürün satış verilerini yönetirken, yıllar arasında aylık satış rakamlarını karşılaştırmanın nasıl yapılacağına dair net bir anlayışa sahip olmak, etkili raporlama için kritik öneme sahiptir. İster bir perakende dükkanı işletiyor olun, ister bir kurumsal varlık için satış verilerini analiz ediyor olun, satış eğilimlerini hızlı bir şekilde belirlemek, değerli içgörüler sağlayabilir. Bu yazıda, iki ardışık yıl için aylara göre ürün satışlarını karşılaştıran bir SQL sorgusu oluşturmayı keşfedeceğiz ve sıfır satış olan ayların net bir şekilde görüntülendiğinden emin olacağız.
Problemi Anlamak
Aşağıdaki gibi yapılandırılmış bir veri setiyle karşılaşabilirsiniz:
Kategori | Gelir | Yıl | Ay
Bisiklet | 10,000 | 2008 | 1
Bisiklet | 12,000 | 2008 | 2
Bisiklet | 12,000 | 2008 | 3
Bisiklet | 15,000 | 2008 | 4
Bisiklet | 11,000 | 2007 | 2
Bisiklet | 11,500 | 2007 | 3
Bisiklet | 15,400 | 2007 | 4
Bu veri setinden, 2007 ve 2008 yılları için Ocak’tan Aralık’a kadar elde edilen gelirleri karşılaştıran bir rapor oluşturmak istiyorsunuz. Amaç, satış gerçekleşmeyen ayların her iki sütunda ‘0’ ile doldurulmasıdır; bu durum, karar verme için daha net bir karşılaştırmalı manzara yaratır.
İstenilen çıktı şu şekilde görünebilir:
Kategori | Ay | Bu Yıl Gelir | Geçen Yıl Gelir
Bisiklet | 1 | 10,000 | 0
Bisiklet | 2 | 12,000 | 11,000
Bisiklet | 3 | 12,000 | 11,500
Bisiklet | 4 | 0 | 15,400
SQL Sorgusunu Oluşturma
Bunu başarmak için, SQL’in güçlü CASE
deyimini uygun toplama fonksiyonları ile birleştirerek kullanacağız. Ayrıca, satış verilerini almak istediğimiz tüm ayları içeren bir yardımcı tablo oluşturmamız gerekecek, hatta satış kaydı olmasa bile.
Adım 1: Tabloları Kurma
Aşağıdaki tablolara sahip olmalısınız:
- Satış Tablosu: Kategoriler, gelirler, yıllar ve aylar hakkında veri tutar.
- Zaman Tablosu (tm): Raporlamak istediğiniz tüm olası yıl ve ay kombinasyonlarını içerir.
Adım 2: Temel Sorgu Yapısı
Boş satır olmadan ürün satışlarını almak için basitleştirilmiş bir SQL sorgusu:
SELECT
Kategori,
Ay,
SUM(CASE WHEN YIL = 2008 THEN Gelir ELSE 0 END) AS Bu_Yıl_Gelir,
SUM(CASE WHEN YIL = 2007 THEN Gelir ELSE 0 END) AS Geçen_Yıl_Gelir
FROM
satış
WHERE
YIL IN (2008, 2007)
GROUP BY
Kategori,
Ay
ORDER BY
Ay;
Açıklama:
- SUM ile CASE: Bu, belirtilen koşullara göre her yılın gelirlerini toplar – iki yılı ayırmanızı sağlar.
- Gruplama: Sonuçlar, netlik için
Kategori
veAy
ile düzenlenir.
Adım 3: Boş Satırları Dahil Etme
Sıfır satış olan ayları da dahil etmek istiyorsanız, sorgunuzu hem satış
hem de tm
tablosunu çekecek şekilde ayarlamanız gerekir. İşte nasıl:
SELECT
fill.Kategori,
fill.Ay,
SUM(CASE WHEN YIL = 2008 THEN Gelir ELSE 0 END) AS Bu_Yıl_Gelir,
SUM(CASE WHEN YIL = 2007 THEN Gelir ELSE 0 END) AS Geçen_Yıl_Gelir
FROM
satış
RIGHT JOIN (SELECT DISTINCT Kategori, Yıl, Ay FROM satış CROSS JOIN tm) AS fill
ON fill.Kategori = satış.Kategori AND fill.Yıl IN (2008, 2007)
GROUP BY
fill.Kategori,
fill.Ay
ORDER BY
fill.Ay;
Açıklama:
- RIGHT JOIN: Bu,
tm
tablosundaki tüm ayların dahil edilmesini sağlar, satış verisi olmayanlar da dahil. - Gruplama ve Sıralama: Aynı gruplaşma ve sıralama, net bir rapor elde etmeye yardımcı olur.
Sonuç
Bu makalede gösterilen teknikleri kullanarak, sıfır satış hesaplamalarını da dikkate alarak, farklı yıllar arasında aylara göre ürün satışlarını karşılaştıran bir rapor oluşturabileceksiniz. Bu yaklaşım sadece kapsamlı veri analizine yardımcı olmakla kalmaz, aynı zamanda genel raporlama yeteneklerini de geliştirir.
Daha fazla okuma ve ileri düzey işlevler için, daha karmaşık raporlama ihtiyaçları için SQL Server 2005’te CASE
ifadeleri ve PIVOT
kullanımını incelemeyi düşünün. İyi sorgulamalar!