Ana içeriğe geç
Modül 14 · Ders 2 ders 3Kurstaki 54/57~15 min
Modül dersleri (2/3)

Çoklu ve zincirleme CTE'ler

Çoklu ve Zincirli CTE'ler

İLE ifadelerinin zarafeti, birkaçını birbirine zincirlediğinizde gerçekten parlıyor. Birçok CTE'yi virgülle ayırarak arka arkaya tanımlayabilirsiniz.

Ve burada yeniden düzenleme yapanların sevdiği bir şey var: Daha sonraki CTE'ler önceki CTE'lerden gelen verileri okuyabilir ve sıralı hesaplamaları parça parça açabilirler!

Çoklu CTE Örneği

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
),
top_customers AS (
  SELECT * FROM premium_customers
  WHERE total_spent > 5000
)
SELECT c.first_name, tc.total_spent
FROM customers c
JOIN top_customers tc ON c.id = tc.customer_id;

Blok tarzı programlama! Her blok yalnızca bir iş yapar.

Egzersiz#sql.m14.l2.e1
Denemeler: 0Yükleniyor…

İki sıralı CTE tanımlayın: \n1) 'order_totals', 'orders'tan 'COUNT(*)' kullanılarak yerleştirilen 'customer_id' ve 'order_count'u hesaplar.\n2) 'gold_users', müşterileri 'order_count >= 2' ile filtreleyen 'order_totals'dan okur.\nSon olarak 'müşteriler' tablosuna KATILIN ('first_name' ve çıkarılarak) 'gold_users' (ON c.id = g.customer_id) ile 'last_name') ve ayrıca 'order_count'larını da gösterin.

Düzenleyici yükleniyor…
İpucu göster

order_totals ve gold_users'ı virgülle ayırın (ikincisi İLE!)

3 denemeden sonra çözüm mevcut

Egzersiz#sql.m14.l2.e2
Denemeler: 0Yükleniyor…

Şimdi metrikleri basitleştirmek için birden fazla CTE kullanalım: 'max_price' oluşturun ('order_items'den 'MAX(unit_price)' kullanarak 'max_value' içeren tek bir satırı çıkarır). Ana sorguda, 'order_items'den her 'product_id' ve 'unit_price'i çıkarın ve bunun maksimum fiyattan ne kadar farklı olduğunu gösterin, '(max_price'den maksimum değeri seçin) - birim_fiyat AS farkı'nı hesaplayın. Katılma Yok — tek bir değer elde etmek için CTE'de bir alt sorgu kullanın!

Düzenleyici yükleniyor…
İpucu göster

max_price OLARAK (...) ürün_id'sini, birim_fiyatını SEÇİN, (maks_fiyattan maksimum_değeri SEÇİN) - sipariş_ürünlerinden birim_fiyat;

3 denemeden sonra çözüm mevcut