Menyusun Semula Pertanyaan Bersarang kepada CTE
Corak temu duga langsung: menukar pertanyaan bersarang yang sukar dibaca menjadi CTE berperingkat
Menyusun Semula Pertanyaan Bersarang kepada CTE ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 4 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 Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Pemfaktoran Semula dalam Temu Duga Langsung
Ini ialah soalan lazim temu duga peringkat pertengahan: inilah pertanyaan yang diberikan, jadikannya mudah dibaca. Penemu duga memberikan Anda SELECT yang bersarang dengan mendalam dan memerhatikan cara Anda menguraikannya. Menukar sarang itu menjadi urutan CTE bernama ialah jawapan yang paling kemas.
Pelajaran ini menerangkan langkah yang tepat supaya Anda boleh melakukannya dengan tenang pada papan putih.
Mulakan dengan Pertanyaan Paling Dalam
Subpertanyaan bersarang secara konsep dilaksanakan dari bahagian dalam ke luar. Jadi, baca pertanyaan itu dari dalam ke luar juga: cari SELECT dalam kurungan yang paling dalam terlebih dahulu; itulah peringkat pertama saluran paip Anda.
Berikan nama yang deskriptif kepadanya dan pindahkannya ke dalam CTE. Segala bahagian yang merujuk blok dalaman itu kini merujuk nama CTE tersebut.
SELECT *
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) t
WHERE t.total > 1000;Pindahkan Satu Aras ke dalam CTE
Ambil jadual terbitan paling dalam itu dan jadikannya CTE. Pertanyaan luar kekal sama kecuali kini ia memilih daripada CTE yang bernama.
Langkah tunggal ini sudah membuang satu lapisan sarang mental dan memberikan langkah tersebut nama yang bermakna.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;Contoh yang Benar-Benar Bersarang
Berikut ialah contoh yang lebih sukar untuk difaktorkan semula: dua aras sarang serta penapis seakan berkorelasi. Matlamatnya ialah mendapatkan purata nilai pesanan dalam kalangan pelanggan daripada kelompok perbelanjaan tertinggi.
Pertanyaan ini betul, tetapi sukar dibaca. Kita akan menguraikannya peringkat demi peringkat.
SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
SELECT customer_id
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) s
WHERE s.total > 1000
);Namakan Peringkat Pertama
Blok paling dalam mengira jumlah perbelanjaan bagi setiap pelanggan. Pindahkannya ke dalam CTE bernama spend. Kini lapisan tengah hanya menapis CTE tersebut.
Perhatikan bahawa setiap pemindahan mengurangkan kedalaman sarang sebanyak satu aras dan menambah nama yang mendokumentasikan tujuannya sendiri.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
SELECT customer_id FROM spend WHERE total > 1000
);Namakan Peringkat Kedua
Ekstrak penapis pada spend ke dalam CTEnya sendiri, iaitu big_spenders. Pertanyaan utama yang selebihnya menjadi penggabungan rata atau semakan keahlian terhadap set yang dinamakan dengan jelas.
Setiap peringkat kini mempunyai satu tanggungjawab, iaitu ciri utama SQL yang kemas.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders GROUP BY customer_id
),
big_spenders AS (
SELECT customer_id FROM spend WHERE total > 1000
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
JOIN big_spenders b ON b.customer_id = o.customer_id;Kekalkan Semantik Semasa Memfaktorkan Semula
Peraturan emas: pemfaktoran semula mesti tidak mengubah hasil. Perhatikan perangkap yang boleh mengubah hasil secara senyap:
- Menukar
INkepadaJOINboleh memperkenalkan baris pendua jika bahagian kanan tidak unik. NOT INdengan nilai NULL berkelakuan berbeza daripadaNOT EXISTS.- Aras perincian pengagregatan mesti kekal sama.
Nyatakan risiko ini dengan lantang untuk menunjukkan ketelitian Anda.
Sahkan Pemfaktoran Semula
Bagaimanakah anda membuktikan bahawa pemfaktoran semula itu mengekalkan hasil asal? Nyatakan bahawa anda akan menjalankan kedua-dua versi dan membandingkan bilangan baris serta jumlah semak, atau membandingkan perbezaan set hasil pada sampel.
Dalam temu duga, walaupun sekadar menyebut Saya akan mengesahkannya dengan membandingkan bilangan dan beberapa baris sampel menunjukkan disiplin kejuruteraan yang melampaui sekadar menulis semula sintaks.
SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);Bila Tidak Perlu Memfaktor Semula
Pemfaktoran semula tidak semestinya membawa penambahbaikan. Satu subkueri cetek mungkin lebih jelas jika dibiarkan, dan memecahkannya secara berlebihan kepada banyak CTE kecil juga boleh menjejaskan kebolehbacaan.
Gunakan pertimbangan anda: faktor semula apabila struktur bersarang mengaburkan maksud atau logik digunakan semula. Beritahu penemu duga bahawa anda akan berhenti apabila kueri dibaca dari atas ke bawah sebagai langkah-langkah berasingan yang dinamakan.
Senarai Semak Pemfaktoran Semula
Kaedah berulang yang boleh anda sebutkan:
- Baca dari bahagian dalam ke luar untuk mencari subkueri yang paling dalam.
- Naikkan subkueri itu menjadi CTE bernama.
- Ulangi ke arah luar, satu lapisan pada satu masa.
- Namakan setiap peringkat berdasarkan hasil yang dihasilkannya.
- Sahkan bahawa hasil tidak berubah (berwaspada terhadap perangkap IN/JOIN dan NULL).
Dengan cara ini, kueri bersarang yang menakutkan berubah menjadi penulisan semula yang tenang dan berperingkat.
Menerangkan Pemfaktoran Semula
Bercakap sambil anda bekerja: Blok paling dalam ialah perbelanjaan setiap pelanggan, jadi saya akan menamakannya perbelanjaan. Lapisan seterusnya menapis pelanggan yang berbelanja besar. Kemudian kueri luar mengira purata amaun pesanan mereka.
Penemu duga menilai komunikasi sama pentingnya dengan ketepatan. Pemfaktoran semula yang diterangkan mengikut peringkat menunjukkan dengan tepat kematangan peringkat pertengahan yang mereka cari.
Semakan Pantas
Kenal pasti langkah pertama yang betul apabila memfaktor semula kueri yang sangat bersarang kepada CTE.
Ringkasan: Memfaktor Semula kepada CTE
Anda telah mempelajari proses pemfaktoran semula yang tenang dan boleh diulang: baca dari bahagian dalam ke luar, naikkan subkueri yang paling dalam menjadi CTE bernama, kemudian bergerak ke luar satu lapisan pada satu masa.
- Namakan setiap peringkat berdasarkan hasil yang dihasilkannya.
- Kekalkan semantik; awasi pendua yang disebabkan oleh IN berbanding JOIN serta perangkap NULL.
- Sahkan hasil dengan membandingkan bilangan dan baris sampel.
- Jangan pecahkan secara berlebihan; berhenti apabila kueri dibaca sebagai langkah-langkah bernama yang jelas.
Dengan itu, kursus CTE selesai; kini anda boleh memfaktor semula dengan yakin dalam temu duga sebenar.
Pelajari Persediaan Temu Duga Pengaturcaraan 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
- 90
- Pelajaran
- 360
Soalan Lazim
Adakah pelajaran “Menyusun Semula Pertanyaan Bersarang kepada CTE” percuma?
Ya — teks penuh “Menyusun Semula Pertanyaan Bersarang kepada 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 Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menyusun Semula Pertanyaan Bersarang kepada CTE”?
Corak temu duga langsung: menukar pertanyaan bersarang yang sukar dibaca menjadi CTE berperingkat Anda berlatih Persediaan Temu Duga Pengaturcaraan 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 Pengaturcaraan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan 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 4 daripada 4.
Berapa lamakah pelajaran “Menyusun Semula Pertanyaan Bersarang kepada 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 Pengaturcaraan ini?
Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan 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