Merangkai Beberapa CTE
Bangun alur langkah bernama yang saling mereferensikan.
Merangkai Beberapa CTE adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Mengapa Merangkai CTE
Masalah wawancara nyata jarang dapat diselesaikan dalam satu langkah. Merangkai CTE memungkinkan Anda membangun alur pemrosesan yang terdiri dari tahap-tahap bernama, dengan setiap tahap mengubah keluaran tahap sebelumnya. Hal ini mencerminkan cara seorang insinyur senior memecah kueri sulit menjadi bagian-bagian yang mudah dikelola.
Daripada menumpuk subkueri hingga tiga tingkat, Anda menulis setiap langkah sekali, memberinya nama, lalu membiarkan langkah berikutnya mereferensikannya.
Sintaks yang Dipisahkan Koma
Untuk mendefinisikan beberapa CTE, Anda menulis WITH sekali, lalu memisahkan setiap blok bernama dengan koma. Anda tidak mengulangi kata kunci WITH.
- Satu
WITHdi bagian paling atas. - Koma di antara setiap definisi CTE.
- Tidak ada koma sebelum kueri utama yang terakhir.
WITH a AS (
SELECT customer_id FROM orders
),
b AS (
SELECT customer_id FROM a
)
SELECT *
FROM b;CTE Berikutnya Dapat Mereferensikan CTE Sebelumnya
Inilah kekuatan perangkaian: sebuah CTE dapat membaca data dari CTE mana pun yang didefinisikan sebelumnya. Visibilitas yang hanya bergerak ke depan ini memungkinkan Anda membangun rantai dependensi.
CTE sebelumnya tidak dapat melihat CTE berikutnya, jadi urutan sangat penting. Susun tahap-tahap Anda mulai dari data mentah menuju bentuk akhir.
WITH filtered AS (
SELECT *
FROM events
WHERE event_type = 'purchase'
),
per_user AS (
SELECT user_id, COUNT(*) AS purchases
FROM filtered
GROUP BY user_id
)
SELECT *
FROM per_user;Contoh Praktis: Alur Pemrosesan Tiga Tahap
Pertanyaan: di antara pelanggan yang membelanjakan lebih dari 1000 dolar, berapa rata-rata pembelanjaannya? Pecah menjadi tiga tahap: jumlahkan pembelanjaan per pelanggan, saring pelanggan dengan pembelanjaan besar, lalu hitung rata-ratanya.
Setiap nama CTE menjelaskan tujuannya, sehingga peninjau dapat langsung memahami alurnya.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
),
big_spenders AS (
SELECT customer_id, total
FROM spend
WHERE total > 1000
)
SELECT AVG(total) AS avg_big_spend
FROM big_spenders;Urutan Definisi Itu Penting
Karena visibilitas hanya bergerak ke depan, CTE yang bergantung pada CTE lain harus dicantumkan setelah dependensinya. Jika Anda mereferensikan nama yang belum didefinisikan, basis data akan menghasilkan kesalahan 'relasi tidak ada'.
Kebiasaan yang baik: baca daftar CTE Anda dari atas ke bawah dan pastikan setiap nama yang digunakan sudah muncul di atasnya.
Mereferensikan Satu CTE dari Beberapa CTE Lain
Satu CTE dapat memasok beberapa CTE tahap lanjutan. Di sinilah perangkaian lebih unggul daripada subkueri bertingkat: Anda menghitung hasil dasar sekali, lalu membuat beberapa cabang darinya.
Di sini, active dan recent sama-sama membaca data dari base, sehingga logika yang sama tidak perlu ditulis ulang.
WITH base AS (
SELECT * FROM users WHERE deleted = false
),
active AS (
SELECT id FROM base WHERE last_login > NOW() - INTERVAL '7 days'
),
recent AS (
SELECT id FROM base WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT (SELECT COUNT(*) FROM active) AS active_cnt,
(SELECT COUNT(*) FROM recent) AS recent_cnt;Menggabungkan Dua CTE
CTE yang dirangkai sering digabungkan dalam kueri utama. Hitung setiap sisi secara terpisah, lalu gabungkan. Dengan demikian, setiap perhitungan tetap terisolasi dan penggabungannya sederhana.
Di bawah ini, kita menghitung jumlah pesanan dan jumlah pengembalian dana secara terpisah, lalu menggabungkannya untuk setiap pelanggan.
WITH orders_cte AS (
SELECT customer_id, COUNT(*) AS orders
FROM orders GROUP BY customer_id
),
refunds_cte AS (
SELECT customer_id, COUNT(*) AS refunds
FROM refunds GROUP BY customer_id
)
SELECT o.customer_id, o.orders, COALESCE(r.refunds, 0) AS refunds
FROM orders_cte o
LEFT JOIN refunds_cte r ON r.customer_id = o.customer_id;Keterbacaan Lebih Utama daripada Penyarangan
Bandingkan subkueri bertingkat tiga dengan alur pemrosesan yang terdiri dari tiga CTE. Versi bertingkat memaksa pembaca menguraikannya secara mental dari bagian terdalam ke luar. Versi CTE dibaca sesuai urutan eksekusi, dari atas ke bawah.
Pewawancara menghargai pendekatan CTE karena itulah pendekatan yang ingin mereka pelihara di lingkungan produksi. Menamai setiap tahap merupakan dokumentasi yang tidak pernah usang.
Kesalahan Umum saat Merangkai
Pemula sering menambahkan koma setelah CTE terakhir, tepat sebelum SELECT utama. Koma di akhir tersebut merupakan kesalahan sintaks.
- Koma hanya ditempatkan di antara definisi CTE.
- Kurung tutup terakhir langsung diikuti kueri utama, tanpa koma.
Jebakan lainnya adalah lupa bahwa setiap CTE memerlukan SELECT lengkapnya sendiri di dalam tanda kurung.
Apakah Setiap Tahap Berjalan Secara Terpisah?
Poin wawancara yang lebih mendalam: secara logis, alur pemrosesan tersebut dibaca sebagai langkah-langkah terpisah, tetapi pengoptimal dapat menanamkan dan menggabungkannya menjadi satu rencana eksekusi. Pada sebagian besar mesin basis data, Anda tidak dipaksa membayar biaya materialisasi hasil antara.
Jadi, perangkaian membantu Anda memahami kueri tanpa harus mengorbankan kinerja. Sampaikan hal ini untuk menunjukkan pemahaman yang mendalam.
Menamai Tahap Seperti Alur Pemrosesan
Nama tahap yang baik mengubah kueri menjadi kode yang mendokumentasikan dirinya sendiri. Pilih nama yang menjelaskan keluaran setiap langkah, bukan operasinya.
spenddanbig_spenderslebih baik daripadastep1danstep2.- Pembaca seharusnya dapat menyimpulkan seluruh alur hanya dari nama-nama CTE.
- Penamaan yang konsisten di seluruh tahap membuat penggabungan dalam kueri utama menjadi jelas.
Dalam wawancara, penamaan tahap yang jelas menunjukkan bahwa Anda menulis SQL produksi yang mudah dipelihara.
Pemeriksaan Cepat
Periksa pemahaman Anda tentang cara CTE yang dirangkai saling mereferensikan.
Rekapitulasi: Merangkai CTE
Anda telah mempelajari cara membangun alur pemrosesan: satu WITH, definisi CTE yang dipisahkan koma, serta visibilitas yang hanya bergerak ke depan, sehingga setiap tahap dapat membaca tahap-tahap sebelumnya.
- Urutkan CTE mulai dari data mentah menuju hasil akhir.
- Gunakan kembali CTE dasar dalam beberapa langkah berikutnya.
- Jangan menambahkan koma di akhir sebelum kueri utama.
- Perangkaian membantu keterbacaan tanpa harus menurunkan kinerja.
Berikutnya: membandingkan CTE dengan subkueri dan tabel sementara.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Merangkai Beberapa CTE” gratis?
Ya — teks lengkap “Merangkai Beberapa CTE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Merangkai Beberapa CTE”?
Bangun alur langkah bernama yang saling mereferensikan. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Merangkai Beberapa CTE” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?
Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis CTE Pertama Anda
- Merangkai Beberapa CTE
- CTE vs Subkueri vs Tabel Sementara
- Memfaktorkan Ulang Kueri Bersarang Menjadi CTE