0Pricing
Coding Interview Prep · Pelajaran

Memfaktorkan Ulang Kueri Bersarang Menjadi CTE

Pola wawancara langsung: ubah kueri bersarang yang sulit dibaca menjadi CTE bertahap.

Memfaktorkan Ulang Kueri Bersarang Menjadi CTE adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 4 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 Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Refaktor dalam Wawancara Langsung

Ini adalah pertanyaan umum untuk tingkat menengah: berikut sebuah kueri, buatlah agar mudah dibaca. Pewawancara memberikan SELECT yang sangat bertingkat dan mengamati cara Anda menguraikannya. Mengubah penyarangan menjadi rangkaian CTE bernama merupakan jawaban yang paling rapi.

Pelajaran ini membahas langkah-langkah yang tepat agar Anda dapat melakukannya dengan tenang di depan papan tulis.

Mulai dari Kueri Paling Dalam

Secara konseptual, subkueri bertingkat dieksekusi dari bagian terdalam ke luar. Jadi, bacalah kueri dengan cara yang sama: temukan SELECT yang berada di dalam tanda kurung paling dalam terlebih dahulu; itulah tahap pertama alur pemrosesan Anda.

Beri nama yang deskriptif dan pindahkan bagian tersebut ke dalam CTE. Semua bagian yang sebelumnya mereferensikan blok bagian dalam itu kini mereferensikan nama CTE tersebut.

SELECT *
FROM (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
) t
WHERE t.total > 1000;

Naikkan Satu Tingkat ke dalam CTE

Ambil tabel turunan yang paling dalam tersebut dan ubah menjadi CTE. Kueri luar tetap sama, kecuali sekarang kueri tersebut memilih data dari CTE yang memiliki nama.

Satu langkah ini sudah menghilangkan satu tingkat penyarangan mental dan memberikan nama yang bermakna pada tahap tersebut.

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 contoh yang lebih sulit untuk direfaktor: dua tingkat penyarangan ditambah filter bergaya berkorelasi. Tujuannya adalah mendapatkan nilai pesanan rata-rata di antara pelanggan dalam tingkat pembelanjaan teratas.

Kueri tersebut benar, tetapi sulit dibaca. Kita akan menguraikannya tahap demi tahap.

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
);

Namai Tahap Pertama

Blok terdalam menghitung total pembelanjaan per pelanggan. Pindahkan blok tersebut ke dalam CTE bernama spend. Sekarang lapisan tengah cukup menyaring CTE tersebut.

Perhatikan bahwa setiap ekstraksi mengurangi kedalaman penyarangan satu tingkat dan menambahkan nama yang mendokumentasikan maksudnya 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
);

Namai Tahap Kedua

Ekstrak filter pada spend ke dalam CTE tersendiri, yaitu big_spenders. Kueri utama yang tersisa menjadi penggabungan datar atau pengujian keanggotaan terhadap himpunan yang memiliki nama jelas.

Sekarang setiap tahap memiliki satu tanggung jawab, yang merupakan ciri khas SQL yang rapi.

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;

Pertahankan Semantik saat Merefactor

Aturan utamanya: refaktor harus tidak mengubah hasil. Waspadai jebakan yang dapat mengubah keluaran secara diam-diam:

  • Mengganti IN dengan JOIN dapat menimbulkan baris duplikat jika sisi kanan tidak unik.
  • NOT IN dengan nilai NULL berperilaku berbeda dari NOT EXISTS.
  • Tingkat agregasi harus tetap sama.

Sampaikan risiko-risiko ini dengan lantang untuk menunjukkan ketelitian.

Verifikasi Refaktor

Bagaimana Anda membuktikan bahwa refaktor tersebut tetap setara? Jelaskan bahwa Anda akan menjalankan kedua versi, lalu membandingkan jumlah baris dan nilai pemeriksaan, atau membandingkan set hasil pada suatu sampel.

Dalam wawancara, bahkan dengan menguraikan Saya akan memvalidasinya dengan membandingkan jumlah dan beberapa baris sampel, Anda menunjukkan disiplin rekayasa perangkat lunak yang melampaui sekadar menulis ulang sintaks.

SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);

Kapan NOT Melakukan Refaktor

Refaktor tidak selalu merupakan perbaikan. Sebaiknya satu subkueri dangkal dibiarkan, karena mungkin lebih jelas, dan memecahnya menjadi banyak CTE kecil juga dapat mengurangi keterbacaan.

Gunakan pertimbangan Anda: lakukan refaktor ketika penyarangan mengaburkan maksud atau logika digunakan kembali. Sampaikan kepada pewawancara bahwa Anda akan berhenti setelah kueri terbaca dari atas ke bawah sebagai langkah-langkah terpisah yang memiliki nama.

Daftar Periksa Refaktor

Metode yang dapat Anda sampaikan secara konsisten:

  • Baca dari bagian terdalam ke luar untuk menemukan subkueri terdalam.
  • Pindahkan bagian tersebut ke dalam CTE yang memiliki nama.
  • Ulangi ke arah luar, satu lapisan setiap kali.
  • Beri nama setiap tahap berdasarkan hasil yang dihasilkannya.
  • Pastikan hasilnya tidak berubah (perhatikan jebakan IN/JOIN dan NULL).

Dengan cara ini, kueri berlapis yang tampak menakutkan berubah menjadi penulisan ulang yang tenang dan bertahap.

Menjelaskan Refaktor Anda

Uraikan sambil bekerja: Blok terdalam menghitung pengeluaran per pelanggan, jadi saya akan menamainya spend. Lapisan berikutnya menyaring pelanggan dengan pengeluaran besar. Kemudian kueri terluar menghitung rata-rata jumlah pesanan mereka.

Pewawancara menilai komunikasi sama pentingnya dengan ketepatan. Refaktor yang dijelaskan tahap demi tahap menunjukkan dengan jelas kematangan tingkat menengah yang mereka harapkan.

Pemeriksaan Singkat

Identifikasi langkah pertama yang tepat saat melakukan refaktor pada kueri yang sangat berlapis menjadi CTE.

Ringkasan: Melakukan Refaktor Menjadi CTE

Anda telah mempelajari refaktor yang tenang dan dapat diulang: baca dari bagian terdalam ke luar, pindahkan subkueri terdalam ke dalam CTE yang memiliki nama, lalu bergerak ke arah luar satu lapisan setiap kali.

  • Beri nama setiap tahap berdasarkan hasil yang dihasilkannya.
  • Pertahankan semantik; perhatikan duplikasi IN-vs-JOIN dan jebakan NULL.
  • Validasi dengan membandingkan jumlah dan baris sampel.
  • Jangan memecahnya secara berlebihan; berhentilah ketika kueri terbaca sebagai langkah-langkah jelas yang memiliki nama.

Kursus CTE ini selesai; kini Anda dapat melakukan refaktor dengan percaya diri dalam wawancara langsung.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memfaktorkan Ulang Kueri Bersarang Menjadi CTE” gratis?

Ya — teks lengkap “Memfaktorkan Ulang Kueri Bersarang Menjadi CTE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Memfaktorkan Ulang Kueri Bersarang Menjadi CTE”?

Pola wawancara langsung: ubah kueri bersarang yang sulit dibaca menjadi CTE bertahap. Kamu berlatih Coding 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 Coding Interview Prep?

Tidak diperlukan pengalaman sebelumnya. Coding 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 4 dari 4.

Berapa lama pelajaran “Memfaktorkan Ulang Kueri Bersarang Menjadi 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 Coding Interview Prep ini?

Ya. Setiap pelajaran Coding 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

  1. Menulis CTE Pertama Anda
  2. Merangkai Beberapa CTE
  3. CTE vs Subkueri vs Tabel Sementara
  4. Memfaktorkan Ulang Kueri Bersarang Menjadi CTE
← Kembali ke Coding Interview Prep