0Pricing
SQL Interview Prep · Pelajaran

Menelusuri Bagan Organisasi

Telusuri hierarki karyawan-manajer hingga kedalaman berapa pun.

Menelusuri Bagan Organisasi adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 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 SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Pertanyaan tentang Bagan Organisasi

"Dengan tabel employees yang memiliki id, name, dan manager_id, daftarkan semua orang di bawah manajer tertentu hingga kedalaman berapa pun." Ini adalah salah satu pertanyaan wawancara CTE rekursif yang paling umum.

Tabel tersebut merujuk ke dirinya sendiri: manager_id menunjuk kembali ke id pada baris lain. Dalam pelajaran ini, Anda akan menelusurinya ke bawah (bawahan) dan ke atas (rantai komando).

Tabel Contoh

Bayangkan data berikut. CEO memiliki manajer NULL. Semua orang lainnya melapor ke atas melalui rantai komando.

  • 1 Ada (manajer NULL)
  • 2 Ben (manajer 1)
  • 3 Cleo (manajer 1)
  • 4 Dan (manajer 2)
  • 5 Eve (manajer 4)

Jadi urutannya adalah: Ada → Ben → Dan → Eve. Ingatlah hal ini saat kita menelusurinya.

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    manager_id INT REFERENCES employees(id)
);

Menelusuri ke Bawah dari Seorang Manajer

Untuk menampilkan semua bawahan di bawah manajer yang dipilih, bagian awal memilih manajer tersebut (atau bawahan langsungnya), lalu bagian rekursif mengikuti manager_id ke bawah.

Di sini kita mulai dari Ben (id 2) dan mengumpulkan semua orang di bawahnya.

WITH RECURSIVE subtree AS (
    SELECT id, name, manager_id, 1 AS depth
    FROM employees WHERE id = 2
    UNION ALL
    SELECT e.id, e.name, e.manager_id, s.depth + 1
    FROM employees e
    JOIN subtree s ON e.manager_id = s.id
)
SELECT name, depth FROM subtree ORDER BY depth;

Membaca Hasil

Kueri di atas menghasilkan Ben pada kedalaman 1, Dan pada kedalaman 2, dan Eve pada kedalaman 3. Bagian awal memulai dari Ben; iterasi pertama menemukan Dan (yang manajernya adalah Ben); iterasi kedua menemukan Eve (yang manajernya adalah Dan); iterasi ketiga tidak menemukan siapa pun, sehingga rekursi berhenti.

Jika pewawancara bertanya "berapa tingkat di bawah Ben posisi Eve?", kolom depth menjawabnya secara langsung: 3 dikurangi 1 sama dengan 2 tingkat.

Menelusuri ke Atas hingga CEO

Pertanyaan sebaliknya juga sama umumnya: "Tampilkan seluruh rantai komando Eve hingga CEO." Balik arah penggabungannya — kini bagian rekursif mengikuti manager_id pada baris saat ini ke atas, menuju induknya.

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id, 1 AS lvl
    FROM employees WHERE id = 5
    UNION ALL
    SELECT e.id, e.name, e.manager_id, c.lvl + 1
    FROM employees e
    JOIN chain c ON e.id = c.manager_id
)
SELECT name, lvl FROM chain ORDER BY lvl;

Menurun vs Menaik: Arah Penggabungan Berubah

Satu-satunya perbedaan struktural antara menelusuri ke bawah dan ke atas adalah kondisi penggabungan:

  • Ke bawah (mencari bawahan): e.manager_id = cte.id — cocokkan karyawan yang manajernya adalah baris yang sudah kita miliki.
  • Ke atas (mencari manajer): e.id = cte.manager_id — cocokkan karyawan yang ID-nya merupakan manajer dari baris saat ini.

Kemampuan menjelaskan perubahan arah ini dengan jelas akan membuat pewawancara terkesan.

Membangun Pohon Berindentasi

Jawaban yang rapi memformat hasil sebagai pohon berindentasi dengan menggunakan depth untuk mengulang spasi. Ini menunjukkan bahwa Anda dapat menyajikan hasil hierarki, bukan hanya menghitungnya.

WITH RECURSIVE org AS (
    SELECT id, name, 1 AS depth
    FROM employees WHERE manager_id IS NULL
    UNION ALL
    SELECT e.id, e.name, o.depth + 1
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT REPEAT('  ', depth - 1) || name AS tree
FROM org
ORDER BY depth;

Mengumpulkan Jalur

Untuk menampilkan rute lengkap dari CEO ke setiap orang, sertakan string path. Ini adalah teknik yang sama dari pelajaran sebelumnya, yang diterapkan pada bagan organisasi.

WITH RECURSIVE org AS (
    SELECT id, name, CAST(name AS VARCHAR(500)) AS path
    FROM employees WHERE manager_id IS NULL
    UNION ALL
    SELECT e.id, e.name, o.path || ' / ' || e.name
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT name, path FROM org ORDER BY path;

Menghitung Bawahan Setiap Manajer

Pertanyaan lanjutan yang sering muncul: "Berapa banyak orang yang secara langsung atau tidak langsung berada di bawah setiap manajer?" Gunakan subpohon rekursif untuk setiap manajer, lalu lakukan agregasi. Pola yang umum adalah menjalankan rekursi sekali untuk setiap akar dan menggunakan GROUP BY pada manajer awal.

Di sini kita menghitung semua bawahan tidak langsung di bawah Ada (CEO) dengan menelusuri seluruh pohon dan menghitung baris di bawah akar.

WITH RECURSIVE org AS (
    SELECT id, name, manager_id, 0 AS depth
    FROM employees WHERE id = 1
    UNION ALL
    SELECT e.id, e.name, e.manager_id, o.depth + 1
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT COUNT(*) - 1 AS total_reports FROM org;

Kesalahan Umum

Perhatikan jebakan yang disiapkan pewawancara berikut:

  • Arah penggabungan salah — menggunakan e.manager_id = cte.id ketika Anda bermaksud menelusuri ke atas akan menghasilkan kumpulan yang salah.
  • Lupa pada penyaring bagian awal — hilangkan WHERE id = X dan Anda akan menjadikan setiap baris sebagai awal, sehingga seluruh hutan dikembalikan.
  • Kedalaman meleset satu — tentukan apakah baris awal berada pada tingkat 0 atau 1, lalu gunakan pilihan tersebut secara konsisten.

Mengapa Tidak Cukup dengan Penggabungan Mandiri?

Penggabungan mandiri dapat mengambil jumlah tingkat yang tetap: satu penggabungan untuk bawahan langsung, dua untuk bawahan tingkat kedua, dan seterusnya. Namun, Anda harus mengetahui kedalamannya terlebih dahulu dan menulis satu penggabungan untuk setiap tingkat.

CTE rekursif menangani kedalaman yang tidak terbatas dan tidak diketahui dalam satu kueri. Ketika pewawancara mengatakan "hierarki dapat memiliki tingkat berapa pun," itu menyingkirkan penggabungan mandiri biasa dan menandakan penggunaan rekursi.

Pemeriksaan Singkat

Pastikan Anda dapat membalik arah penelusuran.

Ringkasan

Penelusuran bagan organisasi adalah kerangka rekursif yang diterapkan pada tabel yang mereferensikan dirinya sendiri:

  • Turun: jadikan seorang manajer sebagai nilai awal, gabungkan dengan e.manager_id = cte.id.
  • Naik: jadikan seorang karyawan sebagai nilai awal, gabungkan dengan e.id = cte.manager_id.
  • Bawa depth untuk indentasi dan path untuk rantai lengkap.
  • Rekursi menangani kedalaman apa pun yang belum diketahui, sedangkan self-join tidak bisa.

Berikutnya: menggunakan rekursi untuk menghasilkan deret angka dan tanggal.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menelusuri Bagan Organisasi” gratis?

Ya — teks lengkap “Menelusuri Bagan Organisasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menelusuri Bagan Organisasi”?

Telusuri hierarki karyawan-manajer hingga kedalaman berapa pun. Kamu berlatih SQL 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 SQL Interview Prep?

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

Berapa lama pelajaran “Menelusuri Bagan Organisasi” 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 SQL Interview Prep ini?

Ya. Setiap pelajaran SQL 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. Anggota Anchor dan Rekursif
  2. Menelusuri Bagan Organisasi
  3. Membuat Deret Angka dan Tanggal
  4. Menghindari Rekursi Tak Terbatas
← Kembali ke SQL Interview Prep