Persediaan Temu Duga Pengaturcaraan · Pelajaran

Menyusun Semula Pertanyaan Bersarang kepada CTE

Corak temu duga langsung: menukar pertanyaan bersarang yang sukar dibaca menjadi CTE berperingkat

Pelajaran 4 daripada 413 langkah

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 IN kepada JOIN boleh memperkenalkan baris pendua jika bahagian kanan tidak unik.
  • NOT IN dengan nilai NULL berkelakuan berbeza daripada NOT 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.

Percuma untuk bermula

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

  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 Pengaturcaraan