Yazılara dön

SQL · · 2 dk

SQL sorgusundan karara

İyi bir analiz sadece sonucu değil, hangi soruyu cevapladığını da bilir.

Bir SQL sorgusu yazmaya başlamadan önce kendime sorduğum ilk soru: "Bu sorgunun cevabı neyi değiştirecek?" Cevap net değilse, o sorgu muhtemelen gereksiz.

Soruyu doğru formüle etmek

Veri analizinde teknik beceri kadar önemli olan şey, doğru soruyu formüle edebilmek. "Satışlarımız nasıl?" yerine "Hangi müşteri segmenti son 3 ayda en çok değer kaybetti?" sorusu, aksiyona çok daha yakın bir cevap üretir.

CRM projemde RFM analizi yaparken tam bu ayrımı yaşadım. İlk sorgum tüm müşterilerin toplam harcamasını getiriyordu — güzel ama işe yaramaz. Asıl lazım olan, segmentler arası geçişi görmekti:

SELECT
    l.segment_name,
    COUNT(r.customer_id) AS musteri_sayisi,
    ROUND(AVG(r.monetary_score), 1) AS ort_harcama_skoru,
    ROUND(AVG(r.recency_score), 1) AS ort_yakinlik_skoru
FROM RFM_Table r
JOIN Loyal l ON r.segment_id = l.segment_id
GROUP BY l.segment_name
ORDER BY musteri_sayisi DESC;

Bu sorgu bana "Şampiyonlar segmentinde 4 müşteri var, ama Risk Altındakilerde 6" dedi. Şimdi bir karar verebilirim: risk altındaki müşterilere özel kampanya mı yapsam, yoksa potansiyel sadıklara yatırım mı?

Dashboard'da az göstermek, çok söylemek

Bir dashboard'da onlarca metrik göstermek yerine, kararı etkileyecek 3-4 tanesini öne çıkarmak genelde daha etkili. OEE Monitor projesinde bu prensibi uyguladım:

MetrikNeden gösteriyoruz?Aksiyon
Anlık OEE (%)Üretim hattının genel durumu< %60 ise hat sorumlusu uyarılır
Son 1 saat hata kodu dağılımıTekrar eden arızaları yakalarEn sık kod için bakım planı
Makine bazlı kullanılabilirlikDarboğaz makineyi tespit ederKapasite planlaması

10 metrik gösteren dashboard'dan hiçbir şey öğrenemezsiniz. 3 metrik gösteren dashboard'dan bir karar çıkar.

Sorgu optimizasyonu: küçük detaylar, büyük farklar

Sorgu doğru soruyu cevaplıyorsa, bir de hızlı cevaplaması lazım. Pratik kurallar:

  • WHERE önce, JOIN sonra: Filtrelemeyi mümkün olduğunca erken yap. WHERE date >= '2025-01-01' ile 1 milyon satırı 10 bine indirdikten sonra JOIN yapmak, 1 milyon satırı JOIN'leyip sonra filtrelemekten kat kat hızlıdır.
  • SELECT * kullanma: Sadece ihtiyacın olan sütunları çek. Özellikle büyük metin veya blob sütunları olan tablolarda fark dramatik.
  • İndeks farkındalığı: WHERE machine_id = 'M-01' sorgusunda machine_id'ye indeks yoksa, veritabanı tüm tabloyu tarar. EXPLAIN ANALYZE ile planı kontrol etmek 30 saniyelik bir iş ama sorgu süresini 10x düşürebilir.

SQL sorgusu yazmak kolay, doğru soruyu sormak zor. Ama asıl zor olan, sorgunun cevabından bir karar üretmek.

Paylaş