Merantaikan Pelbagai CTE
Bina saluran langkah bernama yang saling merujuk
Merantaikan Pelbagai CTE ialah pelajaran Persediaan Temu Duga SQL percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga SQL, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.
Mengapa Merangkaikan CTE
Masalah temu duga sebenar jarang dapat diselesaikan dalam satu langkah. Merangkaikan CTE membolehkan Anda membina saluran paip yang terdiri daripada peringkat bernama, dengan setiap peringkat mengubah hasil daripada peringkat sebelumnya. Ini mencerminkan cara jurutera kanan menguraikan pertanyaan yang sukar menjadi bahagian yang mudah diurus.
Daripada menyarang subpertanyaan hingga tiga aras, Anda menulis setiap langkah sekali, memberikannya nama dan membolehkan langkah seterusnya merujuk kepadanya.
Sintaks Dipisahkan Koma
Untuk mentakrifkan beberapa CTE, tulis WITH sekali, kemudian pisahkan setiap blok bernama dengan koma. Anda tidak mengulangi kata kunci WITH.
- Satu
WITHdi bahagian atas. - Satu koma antara setiap takrifan CTE.
- Tiada koma sebelum pertanyaan utama yang terakhir.
WITH a AS (
SELECT customer_id FROM orders
),
b AS (
SELECT customer_id FROM a
)
SELECT *
FROM b;CTE Kemudian Boleh Merujuk CTE Terdahulu
Inilah kuasa perangkaian: CTE boleh membaca daripada mana-mana CTE yang ditakrifkan sebelumnya. Keterlihatan yang hanya bergerak ke hadapan ini membolehkan Anda membina rantaian kebergantungan.
CTE terdahulu tidak boleh melihat CTE kemudian, jadi susunan adalah penting. Susun peringkat Anda daripada 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 Lengkap: Saluran Paip Tiga Peringkat
Soalan: dalam kalangan pelanggan yang berbelanja lebih daripada 1000 dolar, berapakah purata perbelanjaan? Pecahkan soalan ini kepada tiga peringkat: jumlahkan perbelanjaan bagi setiap pelanggan, tapis pelanggan yang berbelanja besar, kemudian kira purata bagi mereka.
Setiap nama CTE mendokumentasikan tujuannya, jadi penyemak dapat memahami alirannya dengan serta-merta.
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;Susunan Takrifan Penting
Oleh sebab keterlihatan hanya bergerak ke hadapan, CTE yang bergantung pada CTE lain mesti disenaraikan selepas kebergantungannya. Jika Anda merujuk nama yang belum ditakrifkan, pangkalan data akan menghasilkan ralat 'hubungan tidak wujud'.
Amalan yang baik: baca senarai CTE Anda dari atas ke bawah dan pastikan setiap nama yang digunakan telah muncul di atasnya.
Merujuk Satu CTE daripada Beberapa CTE Lain
Satu CTE boleh membekalkan data kepada beberapa CTE hiliran. Di sinilah perangkaian mengatasi subpertanyaan bersarang: Anda mengira hasil asas sekali dan membina beberapa cabang daripadanya.
Di sini, kedua-dua active dan recent membaca daripada base, sekali gus mengelakkan logik yang berulang.
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 dirangkaikan kerap digabungkan dalam pertanyaan utama. Kira setiap bahagian secara berasingan, kemudian gabungkannya. Ini memastikan setiap pengiraan terasing dan penggabungan menjadi mudah.
Di bawah, kita mengira bilangan pesanan dan bilangan bayaran balik secara berasingan, kemudian menggabungkannya bagi 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;Kebolehbacaan Berbanding Pertanyaan Bersarang
Bandingkan subpertanyaan bersarang tiga aras dengan saluran paip tiga CTE. Versi bersarang memaksa pembaca menguraikannya secara mental dari bahagian dalam ke luar. Versi CTE dibaca mengikut susunan pelaksanaan, dari atas ke bawah.
Penemu duga menghargai pendekatan CTE kerana pendekatan inilah yang mereka mahu selenggara dalam persekitaran sebenar. Menamakan setiap peringkat ialah dokumentasi yang tidak pernah menjadi lapuk.
Kesilapan Lazim dalam Perangkaian
Para pemula sering menambah koma selepas CTE terakhir, betul-betul sebelum SELECT utama. Koma di hujung itu ialah ralat sintaks.
- Koma hanya diletakkan antara takrifan CTE.
- Kurungan penutup terakhir diikuti terus oleh pertanyaan utama tanpa koma.
Satu lagi perangkap: terlupa bahawa setiap CTE memerlukan SELECT lengkapnya sendiri di dalam kurungan.
Adakah Setiap Peringkat Berjalan Secara Berasingan?
Ini perkara temu duga yang agak terperinci: secara logik, saluran paip dibaca sebagai langkah yang berasingan, tetapi pengoptimum mungkin menggabungkan dan menyatukannya menjadi satu pelan pelaksanaan. Dalam kebanyakan enjin, Anda tidak semestinya perlu menanggung kos materialisasi hasil perantaraan.
Jadi, perangkaian membantu Anda memahami pertanyaan tanpa semestinya menjejaskan prestasi. Nyatakan perkara ini untuk menunjukkan pemahaman yang mendalam.
Menamakan Peringkat seperti Saluran Paip
Nama peringkat yang baik menjadikan pertanyaan sebagai kod yang mendokumentasikan dirinya sendiri. Utamakan nama yang menerangkan hasil setiap langkah, bukannya operasinya.
spenddanbig_spenderslebih baik daripadastep1danstep2.- Pembaca sepatutnya dapat memahami keseluruhan aliran hanya daripada nama CTE.
- Penamaan yang konsisten merentas peringkat menjadikan penggabungan dalam pertanyaan utama jelas.
Dalam temu duga, penamaan peringkat dengan jelas menunjukkan bahawa Anda menulis SQL produksi yang mudah diselenggara.
Semakan Pantas
Semak pemahaman Anda tentang cara CTE yang dirangkaikan saling merujuk.
Imbas Kembali: Merangkaikan CTE
Anda telah mempelajari cara membina saluran paip: satu WITH, takrifan CTE yang dipisahkan dengan koma dan keterlihatan satu hala ke hadapan, iaitu setiap peringkat boleh membaca peringkat terdahulu.
- Susun CTE daripada data mentah menuju hasil akhir.
- Gunakan semula CTE asas dalam beberapa langkah hiliran.
- Jangan letakkan koma di hujung sebelum pertanyaan utama.
- Perangkaian membantu kebolehbacaan tanpa semestinya menjejaskan prestasi.
Seterusnya: membandingkan CTE dengan subpertanyaan dan jadual sementara.
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Merantaikan Pelbagai CTE” percuma?
Ya — teks penuh “Merantaikan Pelbagai CTE” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga SQL, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Merantaikan Pelbagai CTE”?
Bina saluran langkah bernama yang saling merujuk Anda berlatih Persediaan Temu Duga SQL menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga SQL?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga SQL di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Merantaikan Pelbagai CTE” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga SQL ini?
Ya. Setiap pelajaran Persediaan Temu Duga SQL menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menulis CTE Pertama Anda
- Merantaikan Pelbagai CTE
- CTE berbanding Subpertanyaan berbanding Jadual Sementara
- Menyusun Semula Pertanyaan Bersarang kepada CTE