0Pricing
SQL Interview Prep · Pelajaran

Kumpulan Soal Simulasi Wawancara Lengkap

Soal menyeluruh dengan batas waktu yang menggabungkan penggabungan, fungsi jendela, dan CTE dalam kondisi wawancara.

Kumpulan Soal Simulasi Wawancara Lengkap adalah pelajaran SQL 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 SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Alur Sesi Wawancara SQL

Bagian puncak ini menuntun Anda melalui soal simulasi lengkap yang menggabungkan penggabungan, fungsi jendela, dan CTE dalam kondisi wawancara. Pertama, keterampilan meta: cara bersikap di ruang wawancara.

  • Nyatakan ulang soalnya dan konfirmasikan skemanya.
  • Klarifikasi kasus khusus (NULL, nilai seri, duplikat) sebelum menulis kueri.
  • Jelaskan pendekatan Anda, lalu tulis kuerinya.
  • Uji kueri dengan contoh kecil secara mental.

Pewawancara menilai proses Anda sama besarnya dengan kueri akhir Anda.

Skema Bersama

Semua soal di bawah menggunakan skema kecil untuk perdagangan elektronik. Bacalah sekali agar setiap kueri mudah dipahami.

  • customers(id, name, country)
  • orders(id, customer_id, order_date, status, amount)
  • order_items(order_id, product_id, quantity)
  • products(id, name, category, price)

Ingatlah ini; bagian pelajaran selanjutnya merujuk pada tabel-tabel tersebut.

-- orders.status is one of: 'paid','pending','cancelled'
-- amount is the order total in the customer's currency

Soal 1: Pelanggan Teratas Berdasarkan Pengeluaran

"Tampilkan 3 pelanggan teratas berdasarkan total pengeluaran yang telah dibayar, beserta nama dan totalnya."

Pendekatan: filter pesanan yang telah dibayar, lakukan agregasi per pelanggan, urutkan, lalu batasi jumlah hasil. Nyatakan bahwa Anda mengecualikan pesanan yang dibatalkan dan tertunda, yaitu kasus khusus yang sengaja disisipkan pewawancara.

SELECT c.name,
       SUM(o.amount) AS total_spend
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'paid'
GROUP BY c.id, c.name
ORDER BY total_spend DESC
LIMIT 3;

Soal 2: Pelanggan yang Tidak Pernah Membuat Pesanan

"Daftarkan pelanggan yang tidak pernah membuat pesanan." Ini adalah pola penggabungan anti. Dua solusi yang jelas: LEFT JOIN dengan IS NULL, atau NOT EXISTS.

Utamakan NOT EXISTS karena aman terhadap NULL (tidak seperti NOT IN). Sebutkan perbedaan itu; itulah tepatnya yang ingin diketahui pewawancara.

-- NULL-safe anti-join
SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
  SELECT 1
  FROM orders o
  WHERE o.customer_id = c.id
);

Soal 3: Nilai Pesanan Tertinggi Kedua

"Temukan nilai pesanan berbeda tertinggi kedua." Solusi paling rapi dan aman terhadap nilai seri menggunakan DENSE_RANK, sehingga nilai yang sama berbagi peringkat.

Kasus khusus yang perlu disebutkan: jika tidak ada nilai berbeda kedua, kueri ini tidak mengembalikan baris apa pun. Hal itu mungkin dapat diterima atau mungkin memerlukan pembungkus COALESCE, bergantung pada persyaratan.

SELECT amount
FROM (
  SELECT amount,
         DENSE_RANK() OVER (ORDER BY amount DESC) AS rnk
  FROM orders
) ranked
WHERE rnk = 2;

Soal 4: Pesanan Terbaru per Pelanggan

"Tampilkan pesanan terbaru setiap pelanggan." Ini adalah pola mempertahankan baris terbaru untuk setiap kunci, yang diselesaikan dengan ROW_NUMBER yang dipartisi berdasarkan pelanggan dan diurutkan berdasarkan tanggal secara menurun.

Tambahkan pemecah seri (ID pesanan) agar hasilnya deterministik ketika dua pesanan memiliki tanggal yang sama; detail ini sering disertakan oleh kandidat yang kuat.

SELECT customer_id, id AS order_id, order_date, amount
FROM (
  SELECT o.*,
         ROW_NUMBER() OVER (
           PARTITION BY customer_id
           ORDER BY order_date DESC, id DESC
         ) AS rn
  FROM orders o
) t
WHERE rn = 1;

Soal 5: Pertumbuhan Bulan ke Bulan

"Hitung pendapatan bulanan yang telah dibayar dan persentase perubahannya dibandingkan bulan sebelumnya." Cara ini menggabungkan agregasi dalam CTE dengan LAG.

Langkah pertama mengagregasikan berdasarkan bulan; langkah kedua membandingkan setiap bulan dengan bulan sebelumnya menggunakan LAG. Lindungi pembagian agar bulan pertama (tanpa bulan sebelumnya) tidak menghasilkan kesalahan.

WITH monthly AS (
  SELECT DATE_TRUNC('month', order_date) AS mth,
         SUM(amount) AS revenue
  FROM orders
  WHERE status = 'paid'
  GROUP BY DATE_TRUNC('month', order_date)
)
SELECT mth,
       revenue,
       LAG(revenue) OVER (ORDER BY mth) AS prev_revenue,
       ROUND(
         100.0 * (revenue - LAG(revenue) OVER (ORDER BY mth))
         / NULLIF(LAG(revenue) OVER (ORDER BY mth), 0), 2
       ) AS pct_change
FROM monthly
ORDER BY mth;

Soal 6: Produk Terlaris per Kategori

"Untuk setiap kategori, tampilkan produk terlaris berdasarkan total kuantitas." Ini adalah pola N teratas per kelompok: lakukan agregasi, beri peringkat dalam partisi, lalu filter peringkat 1.

Jika nilai seri penting, ganti ROW_NUMBER dengan RANK agar semua pemimpin bersama ditampilkan. Menyebutkan pilihan ini menunjukkan bahwa Anda memahami perbedaannya.

WITH sales AS (
  SELECT p.category,
         p.name AS product,
         SUM(oi.quantity) AS qty
  FROM order_items oi
  JOIN products p ON p.id = oi.product_id
  GROUP BY p.category, p.name
)
SELECT category, product, qty
FROM (
  SELECT s.*,
         ROW_NUMBER() OVER (
           PARTITION BY category ORDER BY qty DESC
         ) AS rn
  FROM sales s
) r
WHERE rn = 1;

Soal 7: Total Pendapatan Berjalan

"Tampilkan total pendapatan yang telah dibayar secara berjalan (kumulatif) per hari." SUM berjendela dengan bingkai berurutan menghasilkan total berjalan tanpa penggabungan tabel dengan dirinya sendiri.

Sebutkan pembingkaian ROWS untuk akumulasi baris demi baris yang sebenarnya; bingkai RANGE bawaan dapat berperilaku tidak terduga ketika tanggal sama.

SELECT order_date,
       SUM(daily) OVER (
         ORDER BY order_date
         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS running_total
FROM (
  SELECT order_date, SUM(amount) AS daily
  FROM orders
  WHERE status = 'paid'
  GROUP BY order_date
) d
ORDER BY order_date;

Soal 8: Hari Aktif Berturut-turut

"Temukan pengguna yang memiliki setidaknya 3 hari berturut-turut dengan pesanan yang telah dibayar." Ini adalah variasi pola celah-dan-pulau yang menggunakan trik selisih nomor baris.

Mengurangkan nomor baris per pengguna dari tanggal menghasilkan nilai konstan dalam satu rangkaian berturut-turut, sehingga Anda mengelompokkan berdasarkan nilai konstan tersebut dan menghitungnya. Ini merupakan indikator tingkat senior.

WITH days AS (
  SELECT DISTINCT customer_id, order_date
  FROM orders WHERE status = 'paid'
),
grp AS (
  SELECT customer_id, order_date,
         order_date - (ROW_NUMBER() OVER (
           PARTITION BY customer_id ORDER BY order_date
         ) * INTERVAL '1 day') AS island
  FROM days
)
SELECT customer_id, COUNT(*) AS streak_len
FROM grp
GROUP BY customer_id, island
HAVING COUNT(*) >= 3;

Kinerja dan Jebakan Umum

Setelah kueri yang benar, pewawancara bertanya "bagaimana Anda membuatnya lebih cepat?" dan memperhatikan jebakan klasik. Siapkan daftar periksa:

  • Buat indeks pada kolom penggabungan dan penyaringan (misalnya orders(customer_id, status)); hindari fungsi pada kolom berindeks di WHERE.
  • Utamakan EXISTS daripada IN untuk penggabungan anti berukuran besar; NOT IN dengan NULL secara diam-diam tidak mengembalikan apa pun.
  • Memfilter kolom hasil penggabungan luar dalam WHERE diam-diam mengubahnya menjadi penggabungan dalam.
  • Selalu tambahkan pemecah seri agar hasil N teratas bersifat deterministik.
  • Periksa rencana EXPLAIN untuk pemindaian berurutan pada tabel besar.

Pemeriksaan Singkat

Anda memerlukan satu pesanan terbaru untuk setiap pelanggan, dan dua pesanan dapat memiliki tanggal yang sama.

Ringkasan: Set Soal Simulasi Wawancara Lengkap

Anda telah mengerjakan soal wawancara yang paling sering muncul dari awal hingga akhir:

  • Agregasi + LIMIT untuk pengeluaran N teratas.
  • Penggabungan anti dengan NOT EXISTS (aman terhadap NULL).
  • DENSE_RANK untuk nilai tertinggi ke-N, ROW_NUMBER untuk baris terbaru per kunci dan yang teratas per kelompok.
  • LAG untuk perubahan bulan ke bulan, SUM OVER untuk total berjalan.
  • Trik nomor baris celah-dan-pulau untuk rentetan.
  • Akhiri setiap jawaban dengan membahas indeks, EXPLAIN, dan jebakan umum.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kumpulan Soal Simulasi Wawancara Lengkap” gratis?

Ya — teks lengkap “Kumpulan Soal Simulasi Wawancara Lengkap” 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 “Kumpulan Soal Simulasi Wawancara Lengkap”?

Soal menyeluruh dengan batas waktu yang menggabungkan penggabungan, fungsi jendela, dan CTE dalam kondisi wawancara. 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 4 dari 4.

Berapa lama pelajaran “Kumpulan Soal Simulasi Wawancara Lengkap” 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. Normalisasi hingga 3NF
  2. Pemodelan ER dan Kardinalitas Relasi
  3. Skema Bintang dan Desain Gudang Data
  4. Kumpulan Soal Simulasi Wawancara Lengkap
← Kembali ke SQL Interview Prep