Senaryo
Anadolu Market'in satış müdürü, yıl sonu toplantısı öncesinde senden kısa bir rapor istiyor. Henüz tabloları birleştirmeyi bilmen gerekmiyor: her soru tek bir tabloyla çözülür. Bu projede şimdiye kadar öğrendiklerini bir arada kullanacaksın.
| Soru | Kullanacağın konular |
|---|---|
| 1. Kanal performansı | WHERE ile tarih aralığı, GROUP BY, ORDER BY |
| 2. Elektronik kâr marjı | Hesaplanan sütun, ROUND, sıralama |
| 3. Kalabalık şehirler | GROUP BY, HAVING |
| 4. Yaş grupları | CASE, GROUP BY |
| 5. E-posta sağlayıcıları | LIKE, koşullu sayım |
| 6. Stok uyarısı | Çoklu koşul, NULL, sıralama ve ilk N satır |
Kullanacağın tablolar
orders: order_id, customer_id, order_date, status (delivered, shipped, cancelled, returned), channel (web, mobile, store)products: product_id, name, category, price, cost, stockcustomers: customer_id, first_name, last_name, gender, birth_year, city, email, signup_date, segment
Çalışma önerisiHer soruda önce
SELECT * ile ilgili satırlara bak, sonra sütunları ve koşulları ekle. Sonucu yorumlamayı da unutma: hangi kanal öne çıkıyor, hangi ürün en az kâr bırakıyor?Derinleş: işi baştan sona yapmak
Brif: Satış müdürü“Perşembe yıl sonu toplantısı var. Hangi kanala, hangi kategoriye yatırım yapacağımıza karar vereceğiz. Bana tek sayfa yeter: altı sorunun sonucu, her birinin altında bir cümle yorum.”
Çalışma planı
- Veriyi tanı. Soruya başlamadan önce tablonun kaç satır olduğunu, tarih aralığını ve boş değerleri gör. Aşağıdaki sorgu
ordersiçin bunu tek satırda verir: 910 sipariş, 2022-06-22 ile 2024-12-31 arası. - Varsayımlarını yaz. Örneğin “2024 = 1 Ocak dahil, 1 Ocak 2025 hariç”, “iptal edilen siparişler de sayılıyor”. Müdür aynı sayıyı başka biçimde hesaplarsa farkın nedenini bu notlar açıklar.
- Soruyu böl. “Kanal performansı” aslında iki sorudur: kaç sipariş geldi, kaçı iptal oldu? Önce sayıyı, sonra oranı hesapla.
SELECT COUNT(*) AS satir, MIN(order_date) AS ilk_tarih, MAX(order_date) AS son_tarih,
SUM(CASE WHEN channel IS NULL THEN 1 ELSE 0 END) AS kanal_bos,
COUNT(DISTINCT status) AS durum_cesidi
FROM orders;
Kontrol listesi
- Toplam tutuyor mu? Kanal sayıları toplanınca 2024'ün toplam sipariş sayısını (537) vermeli. Vermiyorsa NULL kanal ya da yanlış tarih aralığı var.
- Payda doğru mu? Gmail oranında payda tüm müşteriler (150) mi, e-postası bilinenler (139) mi? %31,3 ile %33,8 arasındaki fark bu seçimden doğar; hangisini kullandığını yaz.
- Uç değerler. Stoğu 0 olan ürün hata mı, gerçekten tükenmiş mi? Fiyatı maliyetinden düşük ürün var mı?
Teslim
Her soru için küçük bir tablo; kanal karşılaştırmasına sütun grafik yeter. En üste üç cümle:
Yönetici özeti örneği2024'te 537 sipariş alındı; mobil (235) ve web (224) siparişlerin %85'inden fazlasını getiriyor. Web'de iptal oranı %11,2 ile mağazanın (%3,8) yaklaşık üç katı; ödeme ve teslimat adımları incelenmeli. Elektronikte en düşük marj Powerbank'ta (%31,9); fiyatı ya da tedarikçisi gözden geçirilmeli.
Kendini değerlendir
| Ölçüt | Başlangıç | İyi | Mükemmel |
|---|---|---|---|
| Doğruluk | Sorgular çalışıyor | Tarih aralığı ve NULL doğru ele alınmış | Varsayımlar yazılı, eşitlik bozucu sıralama var |
| Doğrulama | Kontrol yok | Toplamlar karşılaştırılmış | Her oranın paydası açıkça belirtilmiş |
| Sunum | Ham sonuç tabloları | Her tabloya bir cümle yorum | Karara bağlanan üç cümlelik özet |
Aşağıdaki ek görevler, raporu “sayım”dan “karar”a taşıyan iki soru ekliyor.