5 Pertanyaan SQL yang Sering Diajukan oleh Ilmuwan Data untuk Wawancara Kerja

Meskipun mengkompilasi pertanyaan SQL bukan hal yang paling menarik bagi Data Scientists, pemahaman yang baik tentang SQL sangat penting bagi siapa saja yang ingin berhasil dalam aktivitas apa pun yang terkait dengan pemrosesan data. Intinya di sini adalah bahwa SQL tidak hanya SELECT, FROMdan WHERE. Semakin banyak konstruksi SQL yang diketahuinya oleh spesialis, semakin mudah baginya untuk membuat permintaan untuk mendapatkan dari basis data segala yang mungkin diperlukan. Penulis artikel, terjemahan yang kami terbitkan hari ini, mengatakan bahwa artikel ini bertujuan untuk menyelesaikan dua masalah:





  1. Menjelajahi mekanisme yang melampaui pengetahuan SQL dasar.
  2. Pertimbangan beberapa tugas praktis untuk bekerja dengan SQL.

Artikel ini mencakup 5 pertanyaan SQL dari Leetcode. Mereka mewakili tugas-tugas praktis yang sering dijumpai dalam wawancara.

Pertanyaan No. 1: tempat kedua dalam hal gaji


Tulis kueri SQL untuk mendapatkan dari tabel dengan informasi gaji karyawan ( Employee) entri yang berisi gaji tertinggi kedua.

Misalnya, kueri yang dieksekusi untuk tabel di bawah ini akan kembali 200. Jika tabel tidak memiliki nilai lebih rendah dari gaji tertinggi, permintaan harus dikembalikan null.

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

▍ Keputusan A: gunakan IFNULLdanOFFSET


Berikut adalah mekanisme utama yang akan digunakan dalam solusi untuk masalah ini:

  • IFNULL(expression, alt): fungsi ini mengembalikan argumennya expressionjika tidak sama null. Kalau tidak, argumen dikembalikan alt. Kami akan menggunakan fungsi ini untuk kembali nulljika tabel tidak mengandung nilai yang diinginkan.
  • OFFSET: Operator ini digunakan dengan ekspresi ORDER BYuntuk membuang nbaris pertama . Ini berguna bagi kami karena kami tertarik pada baris kedua dari hasilnya (yaitu, gaji terbesar kedua, data yang ada di tabel).

Ini permintaan yang sudah jadi:

SELECT
    IFNULL(
        (SELECT DISTINCT Salary
        FROM Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1
        ), null) as SecondHighestSalary
FROM Employee
LIMIT 1

▍ Solusi B: gunakan MAX


Kueri di bawah ini menggunakan fungsi MAX. Di sini, nilai gaji tertinggi dipilih, tidak sama dengan gaji maksimum yang diterima di seluruh tabel. Akibatnya, kami mendapatkan apa yang kami butuhkan - gaji terbesar kedua.

SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary != (SELECT MAX(salary) FROM Employee)

Pertanyaan # 2: duplikat alamat email


Tulis kueri SQL yang mendeteksi Personsemua alamat email duplikat di tabel .

+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+

▍ Keputusan A: COUNTdi dalam subquery


Pertama, kami membuat subquery di mana frekuensi kemunculan setiap alamat dalam tabel ditentukan. Kemudian hasil yang dikembalikan oleh subquery disaring menggunakan instruksi WHERE count > 1. Kueri akan mengembalikan informasi tentang alamat yang ditemukan di tabel sumber lebih dari sekali.

SELECT Email
FROM (
    SELECT Email, count(Email) AS count
    FROM Person
    GROUP BY Email
) as email_count
WHERE count > 1

▍ Solusi B: ekspresi HAVING


  • HAVING: Ini adalah ekspresi yang memungkinkan Anda untuk menggunakan instruksi WHEREdengan ekspresi GROUP BY.

SELECT Email
FROM Person
GROUP BY Email
HAVING count(Email) > 1

Pertanyaan No. 3: naiknya suhu


Tulis kueri SQL yang menemukan dalam tabel Weathersemua tanggal (pengidentifikasi tanggal) ketika suhu akan lebih tinggi dari suhu pada tanggal sebelumnya. Artinya, kami tertarik pada tanggal di mana suhu "hari ini" lebih tinggi daripada "kemarin".

+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
|       1 |       2015-01-01 |               10 |
|       2 |       2015-01-02 |               25 |
|       3 |       2015-01-03 |               20 |
|       4 |       2015-01-04 |               30 |
+---------+------------------+------------------+

▍Solusi: DATEDIFF


  • DATEDIFF: Fungsi ini menghitung perbedaan antara dua tanggal. Ini digunakan untuk memberikan perbandingan suhu "hari ini" dan "kemarin" yang tepat.

Jika kita merumuskan kueri berikut dalam bahasa biasa, ternyata itu mengungkapkan ide berikut: kita perlu memilih pengidentifikasi sehingga suhu yang sesuai dengan tanggal yang mereka wakili lebih besar daripada suhu untuk tanggal "kemarin" sehubungan dengan mereka.

SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1

Pertanyaan nomor 4: gaji tertinggi dalam unit


Tabel Employeemenyimpan informasi tentang karyawan perusahaan. Setiap catatan dalam tabel ini berisi informasi tentang pengidentifikasi ( Id) karyawan, namanya ( Name), gaji ( Salary), dan divisi perusahaan tempat ia bekerja ( Department).

+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+

Tabel Departmentberisi informasi tentang divisi perusahaan.

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

Tulis kueri SQL yang ditemukan di setiap departemen karyawan dengan gaji maksimum. Misalnya, untuk tabel di atas, kueri yang sama harus mengembalikan hasil yang diwakili oleh tabel berikut (urutan baris dalam tabel tidak masalah):

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
+------------+----------+--------+

▍Solusi: tim IN


Perintah ini INmemungkinkan Anda untuk mengatur WHEREkondisi dalam instruksi yang sesuai dengan penggunaan beberapa perintah OR. Sebagai contoh, dua konstruksi berikut ini identik:

WHERE country = ‘Canada’ OR country = ‘USA’
WHERE country IN (‘Canada’, ’USA’).

Di sini kita ingin mendapatkan tabel yang berisi nama departemen ( Department), nama karyawan ( Employee) dan gajinya ( Salary). Untuk melakukan ini, kami membuat tabel yang berisi informasi tentang pengenal unit ( DepartmentID) dan gaji maksimum untuk unit ini. Kemudian kami menggabungkan keduanya pada tabel kondisi yang menurut entri dalam tabel yang dihasilkan jatuh hanya jika DepartmentIDdan Salarysebelumnya telah terbentuk dalam tabel.

SELECT
    Department.name AS 'Department',
    Employee.name AS 'Employee',
    Salary
FROM Employee
INNER JOIN Department ON Employee.DepartmentId = Department.Id
WHERE (DepartmentId , Salary) 
    IN
    (   SELECT
            DepartmentId, MAX(Salary)
        FROM
            Employee
        GROUP BY DepartmentId
 )

Pertanyaan No. 5: siswa yang dipindahkan


Mary adalah guru sekolah menengah. Dia memiliki meja seatyang menyimpan nama-nama siswa dan informasi tentang tempat mereka di kelas. Nilai iddalam tabel ini terus meningkat. Mary ingin menukar siswa tetangga.

Berikut adalah tabel penempatan awal siswa:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+

Inilah yang harus terjadi setelah transplantasi siswa tetangga:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+

Tulis permintaan yang akan memungkinkan guru untuk memecahkan masalah di atas.

Harap perhatikan bahwa jika jumlah siswa aneh, Anda tidak perlu mentransfer siswa terakhir ke mana pun.

▍Solusi: menggunakan operator WHEN


Konstruk SQL CASE WHEN THENdapat dianggap sebagai operator ifdalam pemrograman.

Dalam kasus kami, operator pertama WHENdigunakan untuk memeriksa apakah pengidentifikasi aneh ditugaskan ke baris terakhir dalam tabel. Jika demikian, garis tidak dapat berubah. Operator kedua WHENbertanggung jawab untuk menambahkan 1 ke setiap pengidentifikasi ganjil (misalnya, 1, 3, 5 berubah menjadi 2, 4, 6) dan untuk mengurangi 1 dari setiap pengidentifikasi genap (2, 4, 6 berubah menjadi 1, 3, 5).

SELECT 
    CASE 
        WHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
        WHEN id%2 = 1 THEN id + 1
        ELSE id - 1
    END AS id, student
FROM seat
ORDER BY id

Ringkasan


Kami menganalisis beberapa tugas SQL, membahas sepanjang jalan beberapa alat canggih yang dapat digunakan untuk mengkompilasi pertanyaan SQL. Kami berharap apa yang Anda pelajari hari ini akan berguna bagi Anda selama wawancara dalam SQL dan akan terbukti bermanfaat dalam pekerjaan sehari-hari.

PS Di pasar kami ada gambar Docker dengan SQL Server Express, yang diinstal dalam satu klik. Anda dapat memeriksa pengoperasian wadah di VPS. Semua pelanggan baru diberikan 3 hari gratis untuk pengujian.

Pembaca yang budiman! Apa yang bisa Anda sarankan kepada mereka yang ingin menguasai seni membuat query SQL?

Source: https://habr.com/ru/post/undefined/


All Articles