Ana içeriğe geç
Kesit SQL
Orta · Alıştırma Kampı

Alıştırma Kampı: E-ticaret (10 soru)

Sipariş, ürün ve müşteri tablolarıyla çok tablolu analiz pratiği.

Uygulamada aç, 12 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Anadolu Market'in satış verisi

Dört tablo birlikte: customers, orders, order_items, products. Sorular gerçek iş sorularına benziyor. Net tutar her yerde adet × birim fiyat × (1 − indirim).

Nasıl çalışmalı?

  1. Soruyu oku ve sonuçta hangi sütunların, kaç satırın bekleneceğini tahmin et.
  2. Önce SELECT * ile ilgili satırlara bak; sonra sütunları ve koşulları ekle.
  3. Kontrol et'e basmadan önce Sadece çalıştır ile sonucu incele.
  4. İ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
Net tutarSUM(oi.quantity * oi.unit_price * (1 - oi.discount))
Teslim edilenlerWHERE o.status = 'delivered'
Hiç satılmamışLEFT JOIN order_items oi ... WHERE oi.product_id IS NULL
Sipariş sayısı şişmesinCOUNT(DISTINCT o.order_id)
Müşterinin ilk siparişiROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date, order_id)
Önceki ayLAG(ciro) OVER (ORDER BY ay)
Tablolarcustomers, orders, order_items, products. Sipariş satırları order_items'tadır; ciro her zaman satır düzeyinde hesaplanıp toplanır. Sütunların açıklamaları ve örnek satırlar Veri setleri sayfasında.

Derinleş: dört tabloyla güvenli çalışmak

Brif: Kategori müdürü“Gelecek yılın bütçesini kategorilere ve segmentlere dağıtacağız. Hangi kategori ciro getiriyor, hangi müşteri grubu daha değerli? Sayılarının doğru olduğundan emin olmak istiyorum; bütçe buna göre bölünecek.”

Çalışma planı

  1. Tanecikliği belirle. orders'ta bir satır bir sipariş, order_items'ta bir satır bir sipariş kalemidir. JOIN'den sonra satır sayısı kalem sayısına çıkar. Aşağıdaki sorgu bunu gösterir: teslim edilen 712 sipariş, birleşince 1.269 satır olur.
  2. Ölçüyü doğru düzeyde hesapla. Ciro kalem düzeyinde toplanır; sipariş sayısı COUNT(DISTINCT o.order_id) ile sayılır; müşteri başı ciro için önce müşteri düzeyine toplanır.
  3. Durumu sabitle. Ciro = yalnızca delivered. Sipariş sayısında iptaller dahil mi? Soruda yazmıyorsa varsayımını not et.
SELECT COUNT(*) AS satir, COUNT(DISTINCT o.order_id) AS siparis
FROM orders o
JOIN order_items oi ON oi.order_id = o.order_id
WHERE o.status = 'delivered';

Kontrol listesi

Teslim

Yönetici özeti örneği2024'te teslim edilen net ciro 636.316 TL. Sipariş başına sepet segmentler arasında birbirine yakın (1.364–1.625 TL), ama müşteri başına ciro Premium'da 10.833 TL, Bireysel'de 3.028 TL. Fark sepet büyüklüğünden değil alışveriş sıklığından geliyor; bütçe sadakat ve tekrar satın alma programlarına kaydırılmalı.

Kendini değerlendir

ÖlçütBaşlangıçİyiMükemmel
DoğrulukSorgular çalışıyorCiro satır düzeyinde, DISTINCT doğru yerdeHer sonuç bir mutabakatla doğrulanmış
JOIN seçimiHep INNER JOINLEFT JOIN gerektiğinde fark ediliyorKaybolan ve çoğalan satırlar sayıyla gösteriliyor
YorumTabloTabloya bir cümleÖlçüler arasındaki farkın nedeni açıklanmış
Alıştırmalara geç (12)