Persediaan Temu Duga SQL · Pelajaran

Merantaikan Pelbagai CTE

Bina saluran langkah bernama yang saling merujuk

Pelajaran 2 daripada 413 langkah

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 WITH di 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.

  • spend dan big_spenders lebih baik daripada step1 dan step2.
  • 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.

Percuma untuk bermula

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

  1. Menulis CTE Pertama Anda
  2. Merantaikan Pelbagai CTE
  3. CTE berbanding Subpertanyaan berbanding Jadual Sementara
  4. Menyusun Semula Pertanyaan Bersarang kepada CTE
← Kembali ke Persediaan Temu Duga SQL