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.

← Önceki ders · Sıradaki ders · Satış raporu →