Bol pratik, tek tablo
Dil öğrenirken olduğu gibi SQL'de de akıcılık tekrarla gelir. Bu kampta yalnızca customers tablosuyla 10 soru çözeceksin. Her soru bir öncekinden biraz daha zor. Takıldığında ipucuna bak; çözdüğün sorular Tekrar sayfasında yeniden karşına çıkacak.
Tablo
customers: customer_id, first_name, last_name, gender, birth_year, city, email, signup_date, segment. Veri setleri sayfasından inceleyebilirsin.Nasıl çalışmalı?
- Soruyu oku ve sonuçta hangi sütunların, kaç satırın bekleneceğini tahmin et.
- Önce
SELECT *ile ilgili satırlara bak; sonra sütunları ve koşulları ekle. - Kontrol et'e basmadan önce Sadece çalıştır ile sonucu incele.
- İki denemede çözemezsen ipucuna bak; çözümü görmek XP'yi azaltır ama soruyu Tekrar listesine ekler.
Bu kampta en çok kullanacağın kalıplar
| İhtiyaç | Kalıp |
|---|---|
| Filtre | WHERE city = 'İzmir' AND gender = 'K' |
| Boş değer | WHERE city IS NULL |
| Desen | WHERE first_name LIKE 'E%' |
| Grup ve sayı | GROUP BY city HAVING COUNT(*) >= 5 |
| Koşullu sayım | SUM(CASE WHEN segment = 'Premium' THEN 1 ELSE 0 END) |
| Metin parçası | SUBSTR(email, INSTR(email, '@') + 1) |
TablolarYalnızca
customers. Sütunların açıklamaları ve örnek satırlar Veri setleri sayfasında.Derinleş: kampı gerçek bir iş gibi çalışmak
Bu on soru ayrı ayrı alıştırma gibi görünür, ama bir arada bir müşteri tabanı raporu oluşturur. Kampı aşağıdaki brifle çözersen hem hız hem iş refleksi kazanırsın.
Brif: CRM uzmanı“Gelecek ay e-posta ve SMS kampanyası başlatıyoruz. Kaç kişiye ulaşabiliriz, kimler, hangi şehirlerde? Cuma günü bana kısa bir müşteri tabanı kartı gönder.”
Çalışma planı
- Önce veriyi tanı.
COUNT(*)ileCOUNT(sütun)arasındaki fark, o sütundaki boş değer sayısıdır. Aşağıdaki sorgu 150 müşteriden 143'ünün şehrinin bilindiğini ve 12 farklı şehir olduğunu gösterir. - Soruyu grupla. Filtre soruları (1–4), gruplama soruları (5–6, 8–9) ve dönüşüm soruları (7, 10) ayrı beceriler ister. Takıldığın grubu not et.
- Varsayımı yaz. Yaş için referans yıl 2024; e-postası boş müşteri kampanyaya giremez.
SELECT COUNT(*) AS satir, COUNT(city) AS sehir_dolu,
COUNT(DISTINCT city) AS farkli_sehir, COUNT(email) AS email_dolu
FROM customers;
Kontrol listesi
- Gruplar toplamı veriyor mu? Yaş gruplarının toplamı 150 olmalı. “bilinmiyor” grubunu unutursan toplam eksik kalır.
- NULL nereye gitti?
WHERE city = 'İzmir'şehri boş olanları zaten dışlar; amacity <> 'İzmir'de onları dışlar. Bu ikinci durum çoğu kişiyi şaşırtır. - Yazım farkları. “İzmir” ile “izmir” farklı grup oluşturur; şehir listesine bir kez göz at.
Teslim
Yönetici özeti örneği150 müşterinin %56,7'si Bireysel, kalanı Premium ve Kurumsal arasında neredeyse eşit bölünüyor. 11 müşterinin e-postası boş; e-posta kampanyası en fazla 139 kişiye ulaşır. En kalabalık şehir İstanbul (28 müşteri); şehir hedeflemesi için ilk dört şehir tabanın yarıdan fazlasını kapsıyor.
Kendini değerlendir
| Ölçüt | Başlangıç | İyi | Mükemmel |
|---|---|---|---|
| Doğruluk | 10 sorunun 6–7'si | 10 sorunun hepsi, ipucuyla | Hepsi ipucusuz ve ilk denemede |
| NULL farkındalığı | Boş değerler gözden kaçmış | IS NULL doğru kullanılmış | Her sonuçta boşların nereye gittiği açıklanabiliyor |
| Hız | Soru başına 10+ dakika | 5 dakika | 2–3 dakika ve kalıp ezberde |