Project Overview
Digital Talend Scholarship (DTS) adalah program pelatihan pengembangan kompetensi yang telah diberikan kepada talenta digital Indonesia sejak tahun 2018. Program ini ditunjukan untuk meningkatkan keterampilan dan daya saing, produktivitas, profesionalisme SDM bidang teknologi informasi dan komunikasi bagi angkatan kerja muda Indonesia, masyarakat umum, dan aparatur sipil negaradi bidang Komunikasi dan Informatika sehingga dapat meningkatkan produktivitas dan daya saing bangsa di era Industri 4.0, serta mampu memenuhi kebutuhan tenaga terampil di bidang teknologi.
Mitra pelatihan yang bekerja sama yaitu DQLab. DQLab adalah platform belajar online yang berfokus pada pengenalan Data Science & Artificial Intelligence (AI) dengan menggunakan bahasa pemrograman populer seperti Python dan SQL, serta platform edukasi pertama yang mengintegrasi fitur ChatGPT & mengutamakan pembelajaran praktik langsung yang dapat diterapkan di dunia nyata.
Pada project ini menggunakan Structured Query Language (SQL) untuk pengolahan data. SQL dimanfaatkan untuk menyusun query yang kompleks guna mengekstraksi informasi penting, mengidentifikasi pola tersembunyi dalam data, serta mengotomatisasi proses yang sebelumnya memerlukan banyak waktu. Penggunaan SQL memungkinkan pemecahan masalah yang rumit dan mendukung analisis mendalam yang menghasilkan wawasan strategis bagi pengambilan keputusan. Inovasi dalam penggunaan SQL ini memperkuat kemampuan untuk memberikan solusi yang tepat waktu, akurat, dan berdampak.
Challenge
- Challenge Pertama
- Challenge Kedua
- Challenge Ketiga
- Challenge Keempat
- Challenge Kelima
- Challenge Keenam
- Challenge Ketujuh
- Challenge Kedelapan
- Challenge Kesembilan
- Challenge Kesepuluh
- Challenge Kesebelas
- Challenge Keduabelas
- Challenge Ketigabelas
- Challenge Keempatbelas
- Challenge Kelimabelas
- Challenge Keenambelas
id | kurs |
---|---|
1 | USD |
2 | SGD |
3 | EUR |
4 | AUD |
id | kurs_id | nilai_kurs |
---|---|---|
1 | 1 | 14000 |
2 | 2 | 10000 |
3 | 3 | 16000 |
4 | 4 | 11000 |
5 | 2 | 10500 |
Question:
Jika tabel kurs dikenakan operasi LEFT JOIN dengan tabel nilai_kurs dengan kondisi kurs.id = nilai_kurs.kurs_id. Ada berapa row yang akan dihasilkan?
Answer:
SELECT kurs.id, kurs.kurs, nilai_kurs.nilai_kurs
FROM kurs
LEFT JOIN nilai_kurs ON kurs.id = nilai_kurs.kurs_id;
id | kurs | nilai kurs |
---|---|---|
1 | USD | 14000 |
2 | SGD | 10000 |
2 | SGD | 10500 |
3 | EUR | 16000 |
4 | AUD | 11000 |
id | kurs |
---|---|
1 | USD |
2 | SGD |
3 | EUR |
4 | AUD |
id | kurs_id | nilai_kurs |
---|---|---|
1 | 1 | 14000 |
2 | 2 | 10000 |
3 | 3 | 16000 |
4 | 4 | 11000 |
5 | 2 | 10500 |
Question:
Jika tabel kurs dikenakan operasi RIGHT JOIN dengan tabel nilai_kurs dengan kondisi kurs.id = nilai_kurs.kurs_id. Ada berapa row yang akan dihasilkan?
Answer:
SELECT kurs.id, kurs.kurs, nilai_kurs.nilai_kurs
FROM kurs
RIGHT JOIN nilai_kurs ON kurs.id = nilai_kurs.kurs_id;
id | kurs | nilai kurs |
---|---|---|
1 | USD | 14000 |
2 | SGD | 10000 |
3 | EUR | 16000 |
4 | AUD | 11000 |
5 | SGD | 10500 |
nama | operator |
---|---|
Cyntia | Telkomsel |
Rheny | Indosat |
Elita | XL |
Vannesa | Smartfren |
Lola | Axis |
Question:
Mengacu pada kedua tabel di atas, manakah perintah SQL yang akan mengeluarkan hasil yang sama dengan perintah SQL berikut:
SELECT * FROM table1 WHERE nama = 'Cyntia' OR nama = 'Rheny';
Answer:
//opsi satu
SELECT *
FROM table1
WHERE nama IN ('Cyntia', 'Rheny');
//opsi dua
SELECT *
FROM table1
WHERE nama LIKE 'Cyntia' OR nama LIKE 'Rheny';
nama | operator |
---|---|
Cyntia | Telkomsel |
Rheny | Indosat |
nama | operator |
---|---|
Cyntia | Telkomsel |
Rheny | Indosat |
Elita | XL |
Vannesa | Smartfren |
Lola | Axis |
nama | smartphone |
---|---|
Cyntia | iPhone |
Rheny | Samsung |
Elita | Xiaomi |
Vannesa | Oppo |
Lusi | LG |
Question:
Perintah SQL berikut akan menghasilkan berapa row?
SELECT nama FROM table1
UNION
SELECT nama FROM table2;
Answer:
nama |
---|
Cyntia |
Rheny |
Elita |
Vannesa |
Lola |
Lusi |
nama | operator |
---|---|
Cyntia | Telkomsel |
Rheny | Indosat |
Elita | XL |
Vannesa | Smartfren |
Lola | Axis |
nama | smartphone |
---|---|
Cyntia | iPhone |
Rheny | Samsung |
Elita | Xiaomi |
Vannesa | Oppo |
Lusi | LG |
Question:
Perintah SQL berikut akan menghasilkan berapa row?
SELECT *
FROM table1
INNER JOIN table2 ON table2.nama = table1.nama;
Answer:
nama | operator | nama | smartphone |
---|---|---|---|
Cyntia | Telkomesel | Cyntia | iPhone |
Rheny | Indosat | Rheny | Samsung |
Elita | XL | Elita | Xiaomi |
Vannesa | Smartfren | Vannesa | Oppo |
no_urut | kode_produk | nama_produk | harga |
---|---|---|---|
1 | prod-01 | Kotak Pensil DQLab | 60500 |
2 | prod-02 | Flashdisk DQLab 64 GB | 55000 |
3 | prod-03 | Gift Voucher DQLab 100rb | 100000 |
4 | prod-04 | Flashdisk DQLab 32 GB | 40000 |
5 | prod-05 | Gift Voucher DQLab 250rb | 250000 |
6 | prod-06 | Pulpen Multifunction + Laser DQLab | 92500 |
7 | prod-07 | Tas Travel Organizer DQLab | 48000 |
8 | prod-08 | Gantungan Kunci DQLab | 15800 |
9 | prod-09 | Buku Planner Agenda DQLab | 92000 |
10 | prod-10 | Sticky Notes DQLab 500 sheets | 55000 |
Question:
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
Answer:
SELECT no_urut, kode_produk, nama_produk, harga
FROM ms_produk
WHERE harga
BETWEEN 50000 AND 150000;
no_urut | kode_produk | nama_produk | harga |
---|---|---|---|
1 | prod-01 | Kotak Pensil DQLab | 60500 |
2 | prod-02 | Flashdisk DQLab 64 GB | 55000 |
3 | prod-03 | Gift Voucher DQLab 100rb | 100000 |
6 | prod-06 | Pulpen Multifunction + Laser DQLab | 92500 |
9 | prod-09 | Buku Planner Agenda DQLab | 92000 |
10 | prod-10 | Sticky Notes DQLab 500 sheets | 55000 |
no_urut | kode_produk | nama_produk | harga |
---|---|---|---|
1 | prod-01 | Kotak Pensil DQLab | 60500 |
2 | prod-02 | Flashdisk DQLab 64 GB | 55000 |
3 | prod-03 | Gift Voucher DQLab 100rb | 100000 |
4 | prod-04 | Flashdisk DQLab 32 GB | 40000 |
5 | prod-05 | Gift Voucher DQLab 250rb | 250000 |
6 | prod-06 | Pulpen Multifunction + Laser DQLab | 92500 |
7 | prod-07 | Tas Travel Organizer DQLab | 48000 |
8 | prod-08 | Gantungan Kunci DQLab | 15800 |
9 | prod-09 | Buku Planner Agenda DQLab | 92000 |
10 | prod-10 | Sticky Notes DQLab 500 sheets | 55000 |
Question:
Mengacu pada table ms_produk. Tampilkan semua produk yang mengandung kata Flashdisk. Nama kolom yang harus ditampilkan: no_urut, kode_produk, nama_produk, dan harga.
Answer:
SELECT no_urut, kode_produk, nama_produk, harga
FROM ms_produk
WHERE nama_produk LIKE '%Flashdisk%';
no_urut | kode_produk | nama_produk | harga |
---|---|---|---|
2 | prod-02 | Flashdisk DQLab 64 GB | 55000 |
4 | prod-04 | Flashdisk DQLab 32 GB | 40000 |
no_urut | kode_cabang | kode_pelanggan | nama_pelanggan | alamat |
---|---|---|---|---|
1 | jkt-001 | cust0001 | Eva Novianti, S.H. | Vila Sempilan, No. 67 |
2 | jkt-002 | cust0002 | Heidi Goh | Ruko Sawit Permai 72 No. 1 |
3 | jkt-001 | cust0003 | Unang Handoko | Vila Sempilan No. 1 |
4 | jkt-001 | cust0004 | Jokolono Sukarman | Permata Intan Berkilau Residence, Blok C5-7 |
5 | bdg-001 | cust0005 | Tommy Sinaga | Avatar Village, Blok C8 No. 888 |
6 | bdg-001 | cust0006 | Irwan Setianto | Rukan Gunung Seribu, Blok O1 - No. 1 |
7 | jkt-001 | cust0007 | Agus Cahyono | Jalan Motivasi Tinggi, Blok F4 - No. 8 |
8 | jkt-001 | cust0008 | Maria Sirait | Cluster Akasia Residence, Blok AA No. 3 |
9 | jkt-002 | cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
10 | bdg-001 | cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 1 |
Question:
Mengacu pada table ms_pelanggan. 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.
Answer:
SELECT no_urut, kode_pelanggan, nama_pelanggan, alamat
FROM ms_pelanggan
WHERE nama_pelanggan LIKE '%S.H%'
OR nama_pelanggan LIKE '%Ir.%'
OR nama_pelanggan LIKE '%Drs.%';
no_urut | kode_cabang | kode_pelanggan | nama_pelanggan | alamat |
---|---|---|---|---|
1 | jkt-001 | cust0001 | Eva Novianti, S.H. | Vila Sempilan, No. 67 |
9 | jkt-002 | cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
10 | bdg-001 | cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 1 |
no_urut | kode_cabang | kode_pelanggan | nama_pelanggan | alamat |
---|---|---|---|---|
1 | jkt-001 | cust0001 | Eva Novianti, S.H. | Vila Sempilan, No. 67 |
2 | jkt-002 | cust0002 | Heidi Goh | Ruko Sawit Permai 72 No. 1 |
3 | jkt-001 | cust0003 | Unang Handoko | Vila Sempilan No. 1 |
4 | jkt-001 | cust0004 | Jokolono Sukarman | Permata Intan Berkilau Residence, Blok C5-7 |
5 | bdg-001 | cust0005 | Tommy Sinaga | Avatar Village, Blok C8 No. 888 |
6 | bdg-001 | cust0006 | Irwan Setianto | Rukan Gunung Seribu, Blok O1 - No. 1 |
7 | jkt-001 | cust0007 | Agus Cahyono | Jalan Motivasi Tinggi, Blok F4 - No. 8 |
8 | jkt-001 | cust0008 | Maria Sirait | Cluster Akasia Residence, Blok AA No. 3 |
9 | jkt-002 | cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
10 | bdg-001 | cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 1 |
Question:
Mengacu pada table ms_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.
Answer:
SELECT nama_pelanggan
FROM ms_pelanggan
ORDER BY nama_pelanggan;
nama_pelanggan |
---|
Agus Cahyono |
Djoko Wardoyo, Drs. |
Eva Novianti, S.H. |
Heidi Goh |
Ir. Ita Nugraha |
Irwan Setianto |
Jokolono Sukarman |
Maria Sirait |
Tommy Sinaga |
Unang Handoko |
no_urut | kode_cabang | kode_pelanggan | nama_pelanggan | alamat |
---|---|---|---|---|
1 | jkt-001 | cust0001 | Eva Novianti, S.H. | Vila Sempilan, No. 67 |
2 | jkt-002 | cust0002 | Heidi Goh | Ruko Sawit Permai 72 No. 1 |
3 | jkt-001 | cust0003 | Unang Handoko | Vila Sempilan No. 1 |
4 | jkt-001 | cust0004 | Jokolono Sukarman | Permata Intan Berkilau Residence, Blok C5-7 |
5 | bdg-001 | cust0005 | Tommy Sinaga | Avatar Village, Blok C8 No. 888 |
6 | bdg-001 | cust0006 | Irwan Setianto | Rukan Gunung Seribu, Blok O1 - No. 1 |
7 | jkt-001 | cust0007 | Agus Cahyono | Jalan Motivasi Tinggi, Blok F4 - No. 8 |
8 | jkt-001 | cust0008 | Maria Sirait | Cluster Akasia Residence, Blok AA No. 3 |
9 | jkt-002 | cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
10 | bdg-001 | cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 1 |
Question:
Mengacu pada table ms_pelanggan. 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.
Answer:
SELECT nama_pelanggan
FROM ms_pelanggan
ORDER BY
CASE
WHEN nama_pelanggan LIKE 'Ir.%'
THEN SUBSTRING(nama_pelanggan, 5, LENGTH(nama_pelanggan))
WHEN nama_pelanggan LIKE '%S.H.'
THEN SUBSTRING(nama_pelanggan, 1, LENGTH(nama_pelanggan) - 6)
WHEN nama_pelanggan LIKE '%Drs.'
THEN SUBSTRING(nama_pelanggan, 1, LENGTH(nama_pelanggan) - 6)
ELSE nama_pelanggan
END
ASC;
nama_pelanggan |
---|
Agus Cahyono |
Djoko Wardoyo, Drs. |
Eva Novianti, S.H. |
Heidi Goh |
Irwan Setianto |
Ir. Ita Nugraha |
Jokolono Sukarman |
Maria Sirait |
Tommy Sinaga |
Unang Handoko |
no_urut | kode_cabang | kode_pelanggan | nama_pelanggan | alamat |
---|---|---|---|---|
1 | jkt-001 | cust0001 | Eva Novianti, S.H. | Vila Sempilan, No. 67 |
2 | jkt-002 | cust0002 | Heidi Goh | Ruko Sawit Permai 72 No. 1 |
3 | jkt-001 | cust0003 | Unang Handoko | Vila Sempilan No. 1 |
4 | jkt-001 | cust0004 | Jokolono Sukarman | Permata Intan Berkilau Residence, Blok C5-7 |
5 | bdg-001 | cust0005 | Tommy Sinaga | Avatar Village, Blok C8 No. 888 |
6 | bdg-001 | cust0006 | Irwan Setianto | Rukan Gunung Seribu, Blok O1 - No. 1 |
7 | jkt-001 | cust0007 | Agus Cahyono | Jalan Motivasi Tinggi, Blok F4 - No. 8 |
8 | jkt-001 | cust0008 | Maria Sirait | Cluster Akasia Residence, Blok AA No. 3 |
9 | jkt-002 | cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
10 | bdg-001 | cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 1 |
Question:
Mengacu pada table ms_pelanggan. 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.
Answer:
SELECT nama_pelanggan
FROM ms_pelanggan
WHERE LENGTH(nama_pelanggan) >= (
SELECT MAX(LENGTH(nama_pelanggan)) AS max_length
FROM ms_pelanggan
HAVING max_length
);
nama_pelanggan |
---|
Djoko Wardoyo, Drs. |
no_urut | kode_cabang | kode_pelanggan | nama_pelanggan | alamat |
---|---|---|---|---|
1 | jkt-001 | cust0001 | Eva Novianti, S.H. | Vila Sempilan, No. 67 |
2 | jkt-002 | cust0002 | Heidi Goh | Ruko Sawit Permai 72 No. 1 |
3 | jkt-001 | cust0003 | Unang Handoko | Vila Sempilan No. 1 |
4 | jkt-001 | cust0004 | Jokolono Sukarman | Permata Intan Berkilau Residence, Blok C5-7 |
5 | bdg-001 | cust0005 | Tommy Sinaga | Avatar Village, Blok C8 No. 888 |
6 | bdg-001 | cust0006 | Irwan Setianto | Rukan Gunung Seribu, Blok O1 - No. 1 |
7 | jkt-001 | cust0007 | Agus Cahyono | Jalan Motivasi Tinggi, Blok F4 - No. 8 |
8 | jkt-001 | cust0008 | Maria Sirait | Cluster Akasia Residence, Blok AA No. 3 |
9 | jkt-002 | cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
10 | bdg-001 | cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 1 |
Question:
Mengacu pada table ms_pelanggan. 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.
Answer:
SELECT nama_pelanggan
FROM ms_pelanggan
WHERE LENGTH(nama_pelanggan) >= (
SELECT MAX(LENGTH(nama_pelanggan)) AS max_length
FROM ms_pelanggan
) OR LENGTH(nama_pelanggan) <= (
SELECT MIN(LENGTH(nama_pelanggan)) AS min_length
FROM ms_pelanggan
)
ORDER BY LENGTH(nama_pelanggan) DESC;
nama_pelanggan |
---|
Djoko Wardoyo, Drs. |
Heidi Goh |
kode_transaksi | kode_produk | qty | harga_satuan |
---|---|---|---|
tr-0001 | prod-04 | 3 | 40000 |
tr-0001 | prod-02 | 1 | 55000 |
tr-0002 | prod-08 | 2 | 15800 |
tr-0003 | prod-10 | 1 | 55000 |
tr-0004 | prod-09 | 1 | 92000 |
tr-0005 | prod-06 | 1 | 92500 |
tr-0006 | prod-08 | 2 | 15800 |
tr-0007 | prod-08 | 2 | 15800 |
tr-0008 | prod-07 | 1 | 50000 |
tr-0009 | prod-01 | 2 | 62500 |
tr-0010 | prod-04 | 3 | 48000 |
tr-0010 | prod-08 | 1 | 15800 |
tr-0010 | prod-04 | 1 | 40000 |
Question:
Mengacu pada table tr_penjualan_detail. 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.
Answer:
SELECT
tr_penjualan_detail.kode_produk,
ms_produk.nama_produk,
SUM(tr_penjualan_detail.qty) AS total_qty
FROM tr_penjualan_detail
JOIN ms_produk ON tr_penjualan_detail.kode_produk = ms_produk.kode_produk
GROUP BY tr_penjualan_detail.kode_produk, ms_produk.nama_produk
HAVING total_qty >= (
SELECT SUM(qty) as qty
FROM tr_penjualan_detail
GROUP BY kode_produk
ORDER BY qty DESC
LIMIT 1
);
kode_produk | nama_produk | total_qty |
---|---|---|
prod-04 | Flashdisk DQLab 32 GB | 7 |
prod-08 | Gantungan Kunci DQLab | 7 |
kode_transaksi | tanggal_transaksi | kode_cabang | kode_pelanggan | no_urut | kode_produk | harga |
---|---|---|---|---|---|---|
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 1 | prod-01 | 62000 |
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 2 | prod-03 | 95000 |
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 3 | prod-09 | 93000 |
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 4 | prod-04 | 40000 |
tr-0002 | 2019-06-07 13:05:12 | jkt-001 | cust0001 | 1 | prod-03 | 95000 |
tr-0002 | 2019-06-07 13:05:12 | jkt-001 | cust0001 | 2 | prod-10 | 55000 |
tr-0002 | 2019-06-07 13:05:12 | jkt-001 | cust0001 | 3 | prod-07 | 48000 |
tr-0003 | 2019-06-08 22:09:46 | jkt-001 | cust0004 | 1 | prod-02 | 55000 |
tr-0004 | 2019-06-08 22:09:46 | jkt-001 | cust0004 | 1 | prod-10 | 55000 |
tr-0004 | 2019-06-08 22:09:46 | jkt-001 | cust0004 | 2 | prod-04 | 40000 |
tr-0005 | 2019-06-09 22:09:46 | jkt-001 | cust0003 | 1 | prod-09 | 92000 |
tr-0005 | 2019-06-09 22:09:46 | jkt-001 | cust0003 | 2 | prod-01 | 62500 |
tr-0005 | 2019-06-09 22:09:46 | jkt-001 | cust0003 | 3 | prod-04 | 41000 |
tr-0006 | 2019-06-09 22:09:46 | jkt-001 | cust0008 | 1 | prod-05 | 250000 |
tr-0006 | 2019-06-09 22:09:46 | jkt-001 | cust0008 | 2 | prod-08 | 15800 |
Question:
Mengacu pada table tr_penjualan. 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.
Answer:
SELECT
tr_penjualan.kode_pelanggan,
ms_pelanggan.nama_pelanggan,
SUM(tr_penjualan_detail.qty * tr_penjualan_detail.harga_satuan) AS total_harga
FROM tr_penjualan_detail
JOIN tr_penjualan ON tr_penjualan_detail.kode_transaksi = tr_penjualan.kode_transaksi
JOIN ms_pelanggan ON tr_penjualan.kode_pelanggan = ms_pelanggan.kode_pelanggan
GROUP BY tr_penjualan.kode_pelanggan, ms_pelanggan.nama_pelanggan
HAVING total_harga >= (
SELECT MAX(total_harga)
FROM (
SELECT SUM(tr_penjualan_detail.qty * tr_penjualan_detail.harga_satuan) AS total_harga
FROM tr_penjualan_detail
JOIN tr_penjualan ON tr_penjualan_detail.kode_transaksi = tr_penjualan.kode_transaksi
JOIN ms_pelanggan ON tr_penjualan.kode_pelanggan = ms_pelanggan.kode_pelanggan
GROUP BY tr_penjualan.kode_pelanggan, ms_pelanggan.nama_pelanggan
) AS table_max_total_harga
);
kode_pelanggan | nama_pelanggan | total_harga |
---|---|---|
cust007 | Agus Cahyono | 700000 |
kode_transaksi | tanggal_transaksi | kode_cabang | kode_pelanggan | no_urut | kode_produk | harga |
---|---|---|---|---|---|---|
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 1 | prod-01 | 62000 |
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 2 | prod-03 | 95000 |
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 3 | prod-09 | 93000 |
tr-0001 | 2019-06-07 10:09:46 | jkt-001 | cust0007 | 4 | prod-04 | 40000 |
tr-0002 | 2019-06-07 13:05:12 | jkt-001 | cust0001 | 1 | prod-03 | 95000 |
tr-0002 | 2019-06-07 13:05:12 | jkt-001 | cust0001 | 2 | prod-10 | 55000 |
tr-0002 | 2019-06-07 13:05:12 | jkt-001 | cust0001 | 3 | prod-07 | 48000 |
tr-0003 | 2019-06-08 22:09:46 | jkt-001 | cust0004 | 1 | prod-02 | 55000 |
tr-0004 | 2019-06-08 22:09:46 | jkt-001 | cust0004 | 1 | prod-10 | 55000 |
tr-0004 | 2019-06-08 22:09:46 | jkt-001 | cust0004 | 2 | prod-04 | 40000 |
tr-0005 | 2019-06-09 22:09:46 | jkt-001 | cust0003 | 1 | prod-09 | 92000 |
tr-0005 | 2019-06-09 22:09:46 | jkt-001 | cust0003 | 2 | prod-01 | 62500 |
tr-0005 | 2019-06-09 22:09:46 | jkt-001 | cust0003 | 3 | prod-04 | 41000 |
tr-0006 | 2019-06-09 22:09:46 | jkt-001 | cust0008 | 1 | prod-05 | 250000 |
tr-0006 | 2019-06-09 22:09:46 | jkt-001 | cust0008 | 2 | prod-08 | 15800 |
Question:
Mengacu pada table tr_penjualan. Tampilkan daftar pelanggan yang belum pernah melakukan transaksi. Nama kolom yang harus ditampilkan: kode_pelanggan, nama_pelanggan, alamat.
Answer:
SELECT kode_pelanggan, nama_pelanggan, alamat
FROM ms_pelanggan
WHERE kode_pelanggan NOT IN (
SELECT DISTINCT kode_pelanggan
FROM tr_penjualan
);
kode_pelanggan | nama_pelanggan | alamat |
---|---|---|
cust0002 | Heidi Goh | Ruko Sawit Permai 72 No. 1 |
cust0005 | Tommy Sinaga | Avatar Village, Blok C8 No. 888 |
cust0006 | Irwan Setianto | Rukan Gunung Seribu, Blok O1 - No. 1 |
cust0009 | Ir. Ita Nugraha | Perumahan Sagitarius, Gang Kelapa No. 6 |
cust0010 | Djoko Wardoyo, Drs. | Bukit Pintar Data, Blok A1 No. 18 |
kode_transaksi | kode_produk | qty | harga_satuan |
---|---|---|---|
tr-0001 | prod-04 | 3 | 40000 |
tr-0001 | prod-02 | 1 | 55000 |
tr-0002 | prod-08 | 2 | 15800 |
tr-0003 | prod-10 | 1 | 55000 |
tr-0004 | prod-09 | 1 | 92000 |
tr-0005 | prod-06 | 1 | 92500 |
tr-0006 | prod-08 | 2 | 15800 |
tr-0007 | prod-08 | 2 | 15800 |
tr-0008 | prod-07 | 1 | 50000 |
tr-0009 | prod-01 | 2 | 62500 |
tr-0010 | prod-04 | 3 | 48000 |
tr-0010 | prod-08 | 1 | 15800 |
tr-0010 | prod-04 | 1 | 40000 |
Question:
Mengacu pada table tr_penjualan_detail. 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.
Answer:
SELECT
tr_penjualan_detail.kode_transaksi,
tr_penjualan.kode_pelanggan,
ms_pelanggan.nama_pelanggan,
tr_penjualan.tanggal_transaksi,
COUNT(tr_penjualan_detail.kode_produk) AS jumlah_detail
FROM tr_penjualan_detail
JOIN tr_penjualan ON tr_penjualan_detail.kode_transaksi = tr_penjualan.kode_transaksi
JOIN ms_pelanggan ON tr_penjualan.kode_pelanggan = ms_pelanggan.kode_pelanggan
GROUP BY
tr_penjualan_detail.kode_transaksi,
tr_penjualan.kode_pelanggan,
ms_pelanggan.nama_pelanggan,
tr_penjualan.tanggal_transaksi
HAVING jumlah_detail > 1;
kode_transaksi | kode_pelanggan | nama_pelanggan | tanggal_transaksi | jumlah_detail |
---|---|---|---|---|
tr-0001 | cust0007 | Agus Cahyono | 2019-06-07 10:09:46 | 8 |
tr-0002 | cust0001 | Eva Novianti, S.H. | 2019-06-07 13:05:12 | 3 |
tr-0004 | cust0004 | Jokolono Sukarman | 2019-06-08 22:09:46 | 2 |
tr-0005 | cust0003 | Unang Handoko | 2019-06-09 22:09:46 | 3 |
tr-0006 | cust0008 | Maria Sirait | 2019-06-09 22:09:46 | 2 |
Certificate
