Diberikan tabel 'karyawan'
employee_id | salary | department_id
-------------+--------+---------------
Hanya dengan menggunakan SQL, temukan semua varian transfer karyawan dari satu departemen ke departemen lainnya, sehingga gaji rata-rata di departemen 'keberangkatan' dan 'kedatangan' bertambah.
PS Saya ditanya pertanyaan dalam sebuah wawancara, yang tidak pernah memberikan jawaban, dan Google tidak banyak membantu.
interview-question
Alexander
sumber
sumber
Jawaban:
Jadi Anda mencari Karyawan yang berpenghasilan di bawah rata-rata di departemen saat ini tetapi di atas rata-rata di departemen baru yang prospektif.
Salah satu cara yang mungkin untuk mendapatkan semua transfer karyawan yang memenuhi ini adalah
sumber
employees
. Ini menemukan semua departemen yang dapat mereka transfer ke (jika ada) yang memenuhi persyaratan.Mengingat bahwa ini adalah pertanyaan wawancara (dan bukan pertanyaan tes ), ada beberapa kemungkinan tergantung pada konteksnya.
Pertanyaannya tidak lengkap seperti yang dinyatakan dan
tidak bisamungkin sebaiknya tidak dijawab dalam bentuk saat ini ( silakan lihat bagian PEMBARUAN di bawah ). Apa yang hilang? Nah, misalnya:Jika ini lebih dari tabel OLTP, maka harus ada PK / Indeks Unik / batasan unik yang ditentukan di
employee_id
lapangan. Dan dalam hal itu, hanya akan ada satu entri peremployee_id
dan karenanya tidak ada cara untuk menentukan transfer (yaitu tidak adadepartment_id
catatan "lama" ).Jika ini lebih dari tabel OLAP, maka ini bisa menjadi Dimensi yang Berubah Secara Lambat, dalam hal ini akan ada banyak
employee_id
rekaman. Tapi, ada juga perluValidFrom
danValidTo
bidang DATE / DATETIME sehingga keberangkatan dan kedatangan departemen dapat ditentukan dalam urutan yang tepat. Tanpa bidang-bidang ini, tidak ada cara untuk menentukan departemen mana yang merupakan keberangkatan dan mana yang merupakan kedatangan . Dan tidak mengetahui perbedaan itu akan memungkinkan untuk mendapatkan catatan kembali yang merupakan kebalikan dari permintaan.Jadi, "konteks" untuk bagaimana menafsirkan pertanyaan ini adalah alasan mengapa pertanyaan itu dinyatakan seperti itu.
Anda lupa beberapa detail antara wawancara dan menanyakannya di sini:
Itu terjadi, tetapi jika ini masalahnya, maka Anda harus memperbarui pertanyaan untuk mengisi informasi yang hilang, atau tetap tidak terjawab (setidaknya dalam hal mendapatkan jawaban yang bermakna).
Pertanyaannya telah secara akurat ditranskripsikan di sini, dan masalah-masalah ini tidak diketahui, atau dimaksudkan oleh, pewawancara:
Dalam hal ini, jika Anda mengetahui masalah ini dan mereka mengharapkan jawaban, maka Anda dapat menggunakan ini sebagai cara untuk menyingkirkan mereka sebagai majikan yang mungkin ;-).
Pertanyaannya telah secara akurat ditranskripsikan di sini, dan masalah-masalah ini diketahui, atau dimaksudkan oleh, pewawancara:
Dalam hal ini, mereka mungkin menggunakan ini sebagai cara menyiangi orang dengan melihat lebih dari kemampuan teknis mentah. Seringkali sangat penting untuk mengajukan pertanyaan dengan sangat jelas tentang proyek yang sedang Anda kerjakan karena sebagian besar pengguna akhir dan pemilik produk, dll. Penting untuk tidak berasumsi tetapi sebaliknya untuk kembali ke sumber permintaan untuk mendapatkan klarifikasi sehingga Anda tidak membuang waktu untuk bekerja ke arah yang salah.
Ingatlah bahwa Anda tidak mewawancarai suatu posisi untuk hanya menjawab pertanyaan teknis dalam ruang hampa. Anda sedang mewawancarai suatu posisi untuk mengerjakan proyek dan akan selalu ada ambiguitas dan / atau informasi yang menyesatkan tentang apa yang diminta untuk dilakukan. Pewawancara yang baik akan mencoba memahami tingkat keahlian Anda dan apakah Anda benar-benar produktif. Saya telah mengajukan pertanyaan seperti ini ketika mewawancarai orang-orang untuk menyingkirkan orang-orang yang dapat menjawab pertanyaan teknis dengan baik tetapi akan membutuhkan terlalu banyak pegangan tangan dan akhirnya memperlambat tim.
MEMPERBARUI:
Hanya untuk mengklarifikasi klarifikasi bagi mereka yang merasa bahwa ini adalah pertanyaan keterampilan kueri sederhana, yang ditafsirkan sebagai @Martin telah dilakukan dalam jawabannya: kita bahkan tidak tahu apakah ini adalah kata-kata yang tepat dari pertanyaan yang diajukan kepada OP Tapi kita tahu, sejauh kita dapat mempercayai situasinya, bahwa ini diberikan dalam sebuah wawancara. Dan baguspewawancara mengajukan pertanyaan yang tidak hanya menarik keterampilan teknis calon, tetapi juga keterampilan non-teknis / "lunak" mereka. Sangat mungkin bahwa Martin benar dalam interpretasinya bahwa pertanyaannya adalah menanyakan tentang kemungkinan kombinasi transfer di masa depan (yaitu "kadang-kadang cerutu hanya cerutu"). Dan jika ini adalah pertanyaan ujian, maka saya akan terkejut jika jawabannya tidak benar. Tapi, ini bukan pertanyaan ujian. Tentu, itu bisa menjadi pertanyaan wawancara yang diajukan oleh seseorang yang tidak mencoba melihat orang seperti apa kandidatnya dan bagaimana mereka akan tampil dalam pertemuan desain di mana ambiguitas seperti itu muncul lebih sering daripada yang disadari kebanyakan orang. Tapi tidak ada jawaban yang diberikan,menyelesaikan sesuatu (cari di halaman untuk "Anda mencari orang yang", tetapi Anda harus benar-benar membaca semuanya). Jadi, antara dua kandidat yang sama dalam semua hal, tetapi yang satu menganggap penafsiran dan benar, sementara yang lain mengajukan pertanyaan dan kemudian mendapat jawaban yang benar, saya pasti akan pergi dengan yang bertanya dulu.
sumber