Lompati ke konten utama
Modul 14 · Pelajaran 2 dari 354/57 dalam kursus~15 min
Pelajaran modul (2/3)

CTE ganda dan berantai

CTE Berganda dan Berantai

Keanggunan ekspresi WITH benar-benar terpancar saat Anda menyatukan beberapa ekspresi. Anda dapat menentukan banyak CTE secara berurutan, memisahkannya dengan koma.

Dan inilah sesuatu yang disukai oleh para penganut refactoring: CTE yang lebih baru dapat membaca data dari CTE yang lebih awal, membongkar perhitungan sekuensial sepotong demi sepotong!

Contoh Multi-CTE

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;

Ini adalah pemrograman bergaya blok! Setiap blok hanya melakukan satu pekerjaan.

Latihan#sql.m14.l2.e1
Upaya: 0Memuat…

Tentukan dua CTE berurutan: \n1) 'order_totals' menghitung 'customer_id' dan 'order_count' yang ditempatkan menggunakan `COUNT(*)` dari 'orders'.\n2) 'gold_users' membaca dari 'order_totals' yang memfilter pelanggan dengan 'order_count >= 2'.\nAkhirnya GABUNG ke tabel 'customers' (mengekstrak 'first_name' dan 'last_name') dengan 'gold_users' (ON c.id = g.customer_id), dan tampilkan juga 'order_count' mereka.

Memuat editor…
Tunjukkan petunjuk

Pisahkan order_totals dan gold_users dengan koma (tidak ada detik DENGAN!)

Solusi tersedia setelah 3 upaya

Latihan#sql.m14.l2.e2
Upaya: 0Memuat…

Sekarang mari kita gunakan beberapa CTE untuk menyederhanakan metrik: Buat 'max_price' (ekstraksi satu baris dengan 'max_value' menggunakan `MAX(unit_price)` dari 'order_items'). Dalam kueri utama, ekstrak setiap 'id_produk' dan 'harga_unit' dari 'barang_pesanan' dan tunjukkan seberapa besar perbedaannya dari harga maksimum, dengan menghitung '(SELECT max_value FROM max_price) - perbedaan unit_price AS'. No Join — gunakan subquery pada CTE untuk mendapatkan satu nilai!

Memuat editor…
Tunjukkan petunjuk

DENGAN max_price AS (...) PILIH product_id, unit_price, (PILIH max_value DARI max_price) - unit_price DARI order_items;

Solusi tersedia setelah 3 upaya