SQL · DERS 05
JOIN ile tablo birleştirme
Her müşterinin kaç sipariş verdiğini raporla. Siparişi olmayan müşteriler de sonuçta görünsün.
1. Tablolar hangi sütundan eşleşir?
customers tablosunda her müşteri bir kez bulunur. customer_orders tablosunda her satır bir sipariştir. İki tabloyu customer_id üzerinden eşleştir. Örnek veride C1’in iki, C2’nin bir siparişi var. C3’ün siparişi yok.
INNER JOIN yalnızca eşleşmeleri getirir. LEFT JOIN soldaki tüm müşterileri korur ve eşleşme yoksa sağdaki alanlara NULL koyar.
SELECT c.customer_id, COUNT(o.order_id) AS order_count
FROM customers AS c
LEFT JOIN customer_orders AS o ON o.customer_id = c.customer_id
GROUP BY c.customer_id;2. Sayım hatasını bul
COUNT(o.order_id) yerine COUNT(*) yazarsan C3 için ne görürsün?
Çözümü göster
C3 için 1 görürsün. LEFT JOIN, eşleşme olmasa bile C3 için bir sonuç satırı oluşturur. COUNT(o.order_id) o satırdaki NULL sipariş kimliğini saymaz ve 0 döndürür.
3. Laboratuvarda dene
Başlangıç sorgusu C3’ü sonuçtan çıkarıyor. Birleştirme türünü ve sayım ifadesini düzelt.
Laboratuvarı aç →Junior veri analisti mülakat sorusu
Müşteri ve sipariş tablolarını birleştirince müşteri sayısı arttı gibi görünüyor. Neden olabilir?
Örnek yanıt
Bir müşterinin birden fazla siparişi varsa birleştirme sonrası birden fazla satırda görünür. Önce çıktıda bir satırın neyi temsil ettiğini kontrol ederim. Müşteri sayısı için benzersiz müşteri kimliklerini sayar, müşteri bazında sipariş adedi gerekiyorsa kimliğe göre gruplarım.