0% menganggap dokumen ini bermanfaat (0 suara)
85 tayangan7 halaman

ETL Sederhana dengan Pandas dan SQL

Dokumen tersebut berisi serangkaian soal tes SQL mengenai operasi JOIN, filtering data, sorting, aggregation, dan subquery menggunakan beberapa tabel referensi tentang data produk, pelanggan, dan transaksi penjualan.

Diunggah oleh

Eden Hizird
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
85 tayangan7 halaman

ETL Sederhana dengan Pandas dan SQL

Dokumen tersebut berisi serangkaian soal tes SQL mengenai operasi JOIN, filtering data, sorting, aggregation, dan subquery menggunakan beberapa tabel referensi tentang data produk, pelanggan, dan transaksi penjualan.

Diunggah oleh

Eden Hizird
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd

Data Engineer Challenge with SQL

Test SQL - MySQL Dialect


Perhatikan dua table berikut ini.

Jika table kurs dikenakan operasi LEFT JOIN dengan table nilai_kurs dengan kondisi [Link] =


nilai_kurs.kurs_id. Ada berapa row yang akan dihasilkan?
JAWABAN : 5 row

Perhatikan dua table berikut ini.

Jika table kurs dikenakan operasi RIGHT JOIN dengan table nilai_kurs dengan kondisi [Link] =


nilai_kurs.kurs_id. Ada berapa row yang akan dihasilkan?
JAWABAN : 5

Mengacu pada kedua table di atas, manakah perintah SQL yang akan mengeluarkan hasil yang sama
dengan perintah SQL berikut:
SELECT * FROM table1 WHERE nama = 'Cyntia' OR nama = 'Rheny'
JAWABAN :
1. SELECT * FROM table1 WHERE nama IN ('Cyntia', 'Rheny')
2. SELECT * FROM table1 WHERE nama LIKE 'Cyntia' OR nama LIKE 'Rheny'

Perintah SQL berikut akan menghasilkan berapa row?


SELECT nama FROM table1
UNION
SELECT nama FROM table2
JAWABAN : 6

Perintah SQL berikut akan menghasilkan berapa row?


SELECT * FROM table1
INNER JOIN table2 ON [Link] = [Link]
JAWABAN : 4

Produk DQLab Mart

Mengacu pada table ms_produk, tampilkan daftar produk yang memiliki harga antara 50.000 and
150.000.
Nama kolom yang harus ditampilkan: no_urut, kode_produk, nama_produk, dan harga.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT * FROM ms_produk WHERE harga BETWEEN 50000 AND 150000

Thumb drive di DQLab Mart

Tampilkan semua produk yang mengandung kata Flashdisk.


Nama kolom yang harus ditampilkan: no_urut, kode_produk, nama_produk, dan harga.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT * FROM ms_produk WHERE nama_produk LIKE '%Flashdisk%'

Pelanggan Bergelar

Tampilkan hanya nama-nama pelanggan yang hanya memiliki gelar-gelar berikut: S.H, Ir. dan Drs.
Nama kolom yang harus ditampilkan: no_urut, kode_pelanggan, nama_pelanggan, dan alamat.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT * FROM ms_pelanggan WHERE nama_pelanggan LIKE '%S.H%' OR
nama_pelanggan LIKE '%Ir.%' OR nama_pelanggan LIKE '%Drs.%'
Mengurutkan Nama Pelanggan

Tampilkan nama-nama pelanggan dan urutkan hasilnya berdasarkan kolom nama_pelanggan dari yang


terkecil ke yang terbesar (A ke Z).
Nama kolom yang harus ditampilkan: nama_pelanggan.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT nama_pelanggan FROM ms_pelanggan ORDER BY nama_pelanggan ASC

Mengurutkan Nama Pelanggan Tanpa Gelar

Tampilkan nama-nama pelanggan dan urutkan hasilnya berdasarkan kolom nama_pelanggan dari yang


terkecil ke yang terbesar (A ke Z), namun gelar tidak boleh menjadi bagian dari urutan. Contoh: Ir. Agus
Nugraha harus berada di atas Heidi Goh.
Nama kolom yang harus ditampilkan: nama_pelanggan.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT nama_pelanggan FROM ms_pelanggan ORDER BY
SUBSTRING_INDEX(nama_pelanggan, '. ', -1)

Nama Pelanggan yang Paling Panjang


Tampilkan nama pelanggan yang memiliki nama paling panjang. Jika ada lebih dari 1 orang yang memiliki
panjang nama yang sama, tampilkan semuanya.
Nama kolom yang harus ditampilkan: nama_pelanggan.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT nama_pelanggan FROM ms_pelanggan WHERE length(nama_pelanggan)
= (SELECT MAX(LENGTH(nama_pelanggan)) FROM ms_pelanggan)

Nama Pelanggan yang Paling Panjang dengan


Gelar

Tampilkan nama orang yang memiliki nama paling panjang (pada row atas), dan nama orang paling
pendek (pada row setelahnya). Gelar menjadi bagian dari nama. Jika ada lebih dari satu nama yang paling
panjang atau paling pendek, harus ditampilkan semuanya.
Nama kolom yang harus ditampilkan: nama_pelanggan.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT nama_pelanggan FROM ms_pelanggan WHERE LENGTH(nama_pelanggan)
= (SELECT MAX(LENGTH(nama_pelanggan)) FROM ms_pelanggan) OR
LENGTH(nama_pelanggan) = (SELECT MIN(LENGTH(nama_pelanggan)) FROM
ms_pelanggan) ORDER BY LENGTH(nama_pelanggan) DESC

Kuantitas Produk yang Banyak Terjual

Tampilkan produk yang paling banyak terjual dari segi kuantitas. Jika ada lebih dari 1 produk dengan nilai
yang sama, tampilkan semua produk tersebut.
Nama kolom yang harus ditampilkan: kode_produk, nama_produk,total_qty.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT p.kode_produk, p.nama_produk, SUM([Link]) AS total_qty FROM
ms_produk p JOIN tr_penjualan_detail dp ON p.kode_produk =
dp.kode_produk GROUP BY p.kode_produk, p.nama_produk HAVING
total_qty = (SELECT MAX([Link]) FROM (SELECT SUM(qty) AS total
FROM tr_penjualan_detail GROUP BY kode_produk) AS tb)

Pelanggan Paling Tinggi Nilai Belanjanya

Siapa saja pelanggan yang paling banyak menghabiskan uangnya untuk belanja? Jika ada lebih dari 1
pelanggan dengan nilai yang sama, tampilkan semua pelanggan tersebut.
Nama kolom yang harus ditampilkan: kode_pelanggan, nama_pelanggan, total_harga.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT pel.kode_pelanggan, pel.nama_pelanggan, SUM([Link] *
dtp.harga_satuan) AS total_harga
FROM tr_penjualan pen
INNER JOIN ms_pelanggan pel ON pen.kode_pelanggan =
pel.kode_pelanggan
INNER JOIN tr_penjualan_detail dtp ON pen.kode_transaksi =
dtp.kode_transaksi
GROUP BY pel.kode_pelanggan, pel.nama_pelanggan
ORDER BY total_harga DESC
LIMIT 1

Pelanggan yang Belum Pernah Berbelanja

Tampilkan daftar pelanggan yang belum pernah melakukan transaksi.


Nama kolom yang harus ditampilkan: kode_pelanggan, nama_pelanggan, alamat.
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT kode_pelanggan, nama_pelanggan, alamat FROM ms_pelanggan
WHERE NOT EXISTS (SELECT kode_pelanggan FROM tr_penjualan WHERE
tr_penjualan.kode_pelanggan = ms_pelanggan.kode_pelanggan)

Transaksi Belanja dengan Daftar Belanja


lebih dari 1

Tampilkan transaksi-transaksi yang memiliki jumlah item produk lebih dari 1 jenis produk. Dengan lain
kalimat, tampilkan transaksi-transaksi yang memiliki jumlah baris data pada
table tr_penjualan_detail lebih dari satu.
Nama kolom yang harus
ditampilkan:  kode_transaksi, kode_pelanggan, nama_pelanggan, tanggal_transaksi, jumlah_detail
Semua table di atas sudah tersedia, Anda tinggal menulis query Anda dalam Code Editor.
SELECT det.kode_transaksi, pel.kode_pelanggan, pel.nama_pelanggan,
pen.tanggal_transaksi, COUNT(kode_produk) AS jumlah_detail
FROM tr_penjualan_detail det
INNER JOIN tr_penjualan pen ON det.kode_transaksi =
pen.kode_transaksi
INNER JOIN ms_pelanggan pel ON pen.kode_pelanggan =
pel.kode_pelanggan
GROUP BY det.kode_transaksi, pel.kode_pelanggan, pel.nama_pelanggan,
pen.tanggal_transaksi
HAVING jumlah_detail > 1

Anda mungkin juga menyukai