Transkrip Mock Interview SQL plus Rubrik Penilaiannya
TL;DR
Mock interview SQL menilai lima hal: kebenaran query, cara mengklarifikasi soal, cara menjelaskan logika, penanganan kasus tepi seperti NULL dan duplikat, dan kesadaran performa. Kebanyakan kandidat gugur bukan karena querynya salah, tapi karena langsung ngetik tanpa nanya bentuk datanya dulu. Transkrip di artikel ini menunjukkan empat babak pertanyaan lengkap dengan skor per dimensi.
Mock interview SQL menilai lima hal sekaligus: kebenaran query, cara kamu mengklarifikasi soal, cara kamu menjelaskan logika, penanganan kasus tepi, dan kesadaran soal performa. Query yang benar tanpa penjelasan cuma dapat separuh nilai.
Dari 24 sesi latihan yang aku catat sepanjang 2025, 19 kandidat langsung ngetik tanpa nanya bentuk datanya dulu. Itu penyebab kehilangan poin nomor satu, jauh di atas salah sintaks.
Di bawah ini transkrip utuh satu sesi, empat babak, plus rubrik yang dipakai buat ngasih skor.
Apa yang dinilai pewawancara di mock interview SQL?
Pewawancara nilai proses, bukan cuma hasil akhir. Mereka pengen tau gimana kamu memecah soal yang kabur jadi query, apakah kamu sadar risiko duplikat dan NULL, dan apakah orang lain bisa ngerti query kamu tanpa penjelasan tambahan. Query yang jalan tapi nggak bisa dijelasin dianggap setengah selesai.
Sisi teknisnya biasanya nutup empat area: filter dan agregasi, JOIN, subquery atau CTE, dan window function.
Rubrik penilaian mock interview SQL
Rubrik ini yang aku pakai buat ngasih skor. Skala 1 sampai 4 per dimensi, jadi skor penuh 20.
| Dimensi | Skor 1 | Skor 2 | Skor 3 | Skor 4 |
|---|---|---|---|---|
| Kebenaran hasil | Query error | Jalan tapi hasil salah | Hasil benar | Benar plus tahan kasus tepi |
| Klarifikasi soal | Nggak nanya sama sekali | Nanya setelah ditegur | Nanya 1 sampai 2 hal penting | Nanya bentuk data, duplikat, dan definisi metrik |
| Penjelasan logika | Diam total | Baca ulang query keras-keras | Jelasin alur per bagian | Jelasin alur plus alasan milih pendekatan |
| Kasus tepi | Nggak sadar | Sadar setelah dipancing | Sebut NULL atau duplikat | Sebut dan tangani di query |
| Kesadaran performa | Nggak dibahas | Sebut "mungkin lambat" | Sebut indeks atau ukuran data | Usul perbaikan konkret |
Patokan hasil: 16 ke atas siap interview beneran, 11 sampai 15 masih perlu latihan terarah, di bawah 11 sebaiknya balik dulu ke dasar JOIN dan GROUP BY.
Babak 1: pemanasan dan filter dasar
Skema yang dikasih ke kandidat: tabel pesanan berisi kolom id, pelanggan_id, tanggal, total, status. Tabel pelanggan berisi id, nama, kota, tanggal_daftar.
Pewawancara: Ambil total omzet per bulan sepanjang 2025.
Kandidat: Sebelum ngetik, kolom status isinya apa aja ya? Aku mau tau apakah pesanan batal ikut dihitung.
Pewawancara: Isinya selesai, batal, dan pending. Yang dihitung cuma selesai.
Kandidat: Oke, jadi filternya dua: status selesai, dan tahun 2025.
SELECT DATE_TRUNC('month', tanggal) AS bulan,
SUM(total) AS omzet
FROM pesanan
WHERE status = 'selesai'
AND tanggal >= DATE '2025-01-01'
AND tanggal < DATE '2026-01-01'
GROUP BY 1
ORDER BY 1;
Catatan penilai: Nanya arti kolom status sebelum ngetik, dan pakai batas tanggal terbuka di sebelah kanan. Pemakaian tanggal < '2026-01-01' lebih aman dari BETWEEN kalau kolomnya bertipe timestamp. Skor kebenaran 4, klarifikasi 3.
Fungsi SUM di sini termasuk aggregate function, yang selalu jadi pembuka di hampir semua sesi.
Babak 2: JOIN dan agregasi
Pewawancara: Siapa 5 pelanggan dengan total belanja terbesar?
Kandidat: Ada kemungkinan nama pelanggan kembar nggak? Kalau iya aku grup pakai id, bukan nama.
Pewawancara: Bagus. Anggap ada dua orang bernama sama.
SELECT p.id,
p.nama,
SUM(o.total) AS total_belanja,
COUNT(*) AS jumlah_pesanan
FROM pelanggan p
JOIN pesanan o ON o.pelanggan_id = p.id
WHERE o.status = 'selesai'
GROUP BY p.id, p.nama
ORDER BY total_belanja DESC
LIMIT 5;
Kandidat: Aku pakai INNER JOIN karena pelanggan tanpa pesanan nggak relevan buat peringkat belanja.
Catatan penilai: Grup pakai id itu tanda kandidat mikirin duplikat. Alasan milih INNER JOIN disebut tanpa diminta. Skor penjelasan 4.
Babak 3: window function
Pewawancara: Ambil 3 produk dengan omzet tertinggi di tiap kategori.
Kandidat: Ini pakai peringkat dalam kelompok, jadi window function. Aku pilih RANK dulu, tapi kalau kamu mau persis 3 baris walaupun ada nilai seri, ROW_NUMBER lebih cocok.
WITH omzet_produk AS (
SELECT pr.kategori,
pr.nama AS nama_produk,
SUM(op.qty * op.harga) AS omzet
FROM order_produk op
JOIN produk pr ON pr.id = op.produk_id
GROUP BY pr.kategori, pr.nama
),
peringkat AS (
SELECT kategori,
nama_produk,
omzet,
RANK() OVER (PARTITION BY kategori ORDER BY omzet DESC) AS r
FROM omzet_produk
)
SELECT kategori, nama_produk, omzet
FROM peringkat
WHERE r <= 3
ORDER BY kategori, r;
Catatan penilai: Beda RANK dan ROW_NUMBER disebut sendiri, itu jarang. Pemakaian CTE bikin querynya kebaca dari atas ke bawah. Rincian perilaku tiap fungsi jendela ada di dokumentasi PostgreSQL.
Satu hal yang kelewat: window function nggak bisa dipakai langsung di WHERE, makanya butuh CTE atau subquery. Kandidat melakukannya dengan benar tapi nggak nyebut alasannya.
Babak 4: pertanyaan jebakan
Pewawancara: Cari pelanggan yang belum pernah pesan sama sekali.
Kandidat: Kalau pakai INNER JOIN hasilnya kosong, jadi harus LEFT JOIN terus saring baris yang pasangannya NULL.
SELECT p.id, p.nama
FROM pelanggan p
LEFT JOIN pesanan o ON o.pelanggan_id = p.id
WHERE o.id IS NULL;
Pewawancara: Kalau aku tulis WHERE o.id != 5 hasilnya sama nggak?
Kandidat: Nggak. Perbandingan sama NULL hasilnya bukan true, jadi barisnya kebuang. Buat NULL harus pakai IS NULL.
Catatan penilai: Ini jebakan yang paling sering kena. Dari 24 sesi, cuma 7 kandidat yang jawab benar di percobaan pertama.
Jebakan kedua yang sering muncul: beda COUNT(*) dan COUNT(kolom). Yang pertama ngitung semua baris, yang kedua ngelewatin baris dengan nilai NULL di kolom itu.
Skor akhir kandidat
| Dimensi | Skor | Catatan |
|---|---|---|
| Kebenaran hasil | 4 | Empat query jalan dan hasilnya benar |
| Klarifikasi soal | 3 | Nanya status dan nama kembar, lupa nanya rentang data |
| Penjelasan logika | 4 | Alasan milih JOIN dan RANK disebut sendiri |
| Kasus tepi | 4 | NULL dan duplikat ditangani di query |
| Kesadaran performa | 2 | Sempat bilang "mungkin berat", nggak lanjut ke indeks |
| Total | 17 / 20 | Siap masuk interview beneran |
Skor rata-rata dari 24 sesi yang aku catat: 12,3 dari 20. Dimensi paling lemah selalu sama, yaitu kesadaran performa dengan rata-rata 1,8.
Kesalahan umum kandidat
- Ngetik sebelum nanya. Sepuluh detik buat nanya bentuk data nghemat dua menit revisi.
- Diam waktu mikir. Pewawancara nggak bisa nilai isi kepala kamu. Ucapkan rencananya walau belum yakin.
- Pakai SELECT bintang di jawaban akhir. Sebut kolomnya biar kelihatan kamu tau apa yang dibutuhin.
- Lupa filter status. Ngitung omzet termasuk pesanan batal itu kesalahan definisi metrik, dan itu dinilai lebih berat dari salah sintaks.
- Nggak ngecek hasil. Kalimat "aku mau cek dulu jumlah barisnya masuk akal atau nggak" nambah nilai.
FAQ
Mock interview SQL biasanya berapa lama?
Sesi teknis SQL umumnya 30 sampai 45 menit, dengan 3 sampai 5 soal yang naik tingkat. Kalau latihan sendiri, pasang timer 40 menit dan larang diri kamu buka dokumentasi.
Boleh nggak nanya balik ke pewawancara?
Bukan cuma boleh, tapi dinilai. Pertanyaan soal bentuk tabel, arti kolom status, dan kemungkinan duplikat menunjukkan kamu mikir sebelum ngetik.
Kalau lupa sintaks di tengah interview gimana?
Bilang apa adanya, terus tulis rencananya dalam bahasa biasa. Yang bikin nilai jeblok itu diam lama atau ngarang sintaks yang kamu sendiri nggak yakin.
Window function wajib dikuasai buat posisi entry level?
JOIN dan GROUP BY masih porsi terbesar, tapi ROW_NUMBER dan RANK muncul cukup sering di babak akhir. Kuasai tiga dulu: ROW_NUMBER, RANK, dan LAG.
Gimana latihan kalau nggak punya partner?
Rekam layar dan suara kamu sendiri sambil ngerjain soal, lalu tonton ulang pakai rubrik di artikel ini. Cara ini paling cepat nunjukkin kebiasaan buruk.
Penutup
Dua kebiasaan yang paling nambah skor: nanya bentuk data sebelum ngetik, dan ngomongin rencana sambil ngetik. Dua-duanya bisa dilatih tanpa nambah pengetahuan SQL sama sekali.
Cetak rubriknya, rekam sesi latihan kamu, lalu nilai sendiri minggu ini. Ulangi tiga minggu berturut-turut dan bandingin skornya.
Butuh bahan soalnya? Ambil dari Latihan SQL 30 Hari, isinya 30 soal bertingkat dengan pembahasan. Buat ngerapikan definisi angka yang dipakai di jawaban, cek juga glosarium KPI.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Kerja Data Analyst di Luar Negeri: Visa, Gaji, dan Persiapan
Kerja data analyst di luar negeri bukan soal ijazah luar negeri. Yang nentuin: sponsorship visa, portfolio, dan negara yang kamu incar.
Financial Analyst vs Data Analyst: Dua Dunia yang Makin Nyatu
Financial analyst kerja di angka uang, data analyst kerja di angka apa pun. Tapi di 2026 tools-nya makin sama. Ini beda dan irisannya.
Marketing Analyst: Metrik, Tools, dan Jalur Masuknya
Apa itu marketing analyst, metrik apa yang tiap hari dipegang, tools yang wajib bisa, dan jalur masuk yang paling realistis buat orang non-teknis di Indonesia.