PORFOLIO

Data Engineer Challenge with SQL

SQL source: microsoft.com

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

  1. Challenge Pertama
  2. id kurs
    1 USD
    2 SGD
    3 EUR
    4 AUD
    tabel kurs
    id kurs_id nilai_kurs
    1 1 14000
    2 2 10000
    3 3 16000
    4 4 11000
    5 2 10500
    tabel nilai_kurs

    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
    Hasil : 5 Baris.

  3. Challenge Kedua
  4. id kurs
    1 USD
    2 SGD
    3 EUR
    4 AUD
    tabel kurs
    id kurs_id nilai_kurs
    1 1 14000
    2 2 10000
    3 3 16000
    4 4 11000
    5 2 10500
    tabel nilai_kurs

    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
    Hasil : 5 Baris.

  5. Challenge Ketiga
  6. nama operator
    Cyntia Telkomsel
    Rheny Indosat
    Elita XL
    Vannesa Smartfren
    Lola Axis
    tabel table1

    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
    Hasil : 2 Baris.

  7. Challenge Keempat
  8. nama operator
    Cyntia Telkomsel
    Rheny Indosat
    Elita XL
    Vannesa Smartfren
    Lola Axis
    tabel table1
    nama smartphone
    Cyntia iPhone
    Rheny Samsung
    Elita Xiaomi
    Vannesa Oppo
    Lusi LG
    tabel table2

    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
    Hasil : 6 Baris.

  9. Challenge Kelima
  10. nama operator
    Cyntia Telkomsel
    Rheny Indosat
    Elita XL
    Vannesa Smartfren
    Lola Axis
    tabel table1
    nama smartphone
    Cyntia iPhone
    Rheny Samsung
    Elita Xiaomi
    Vannesa Oppo
    Lusi LG
    tabel table2

    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
    Hasil : 4 Baris.

  11. Challenge Keenam
  12. 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
    tabel ms_produk

    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
    Hasil : 6 Baris.

  13. Challenge Ketujuh
  14. 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
    tabel ms_produk

    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
    Hasil : 2 Baris.

  15. Challenge Kedelapan
  16. 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
    tabel ms_pelanggan

    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
    Hasil : 3 Baris.

  17. Challenge Kesembilan
  18. 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
    tabel ms_pelanggan

    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
    Hasil : 10 Baris.

  19. Challenge Kesepuluh
  20. 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
    tabel ms_pelanggan

    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
    Hasil : 10 Baris.

  21. Challenge Kesebelas
  22. 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
    tabel ms_pelanggan

    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.
    Hasil : 1 Baris.

  23. Challenge Keduabelas
  24. 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
    tabel ms_pelanggan

    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
    Hasil : 2 Baris.

  25. Challenge Ketigabelas
  26. 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
    tabel tr_penjualan_detail

    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
    Hasil : 2 Baris.

  27. Challenge Keempatbelas
  28. 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
    tabel tr_penjualan

    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
    Hasil : 1 Baris.

  29. Challenge Kelimabelas
  30. 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
    tabel tr_penjualan

    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
    Hasil : 5 Baris.

  31. Challenge Keenambelas
  32. 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
    tabel tr_penjualan_detail

    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
    Hasil : 5 Baris.

Certificate

Certificate

My Portfolio

Here are some portfolios I created using various tools and captivating Data Visualizations.

  • All
  • Excel
  • Tableau
  • Looker Studio
  • SQL
  • Python

Contact Me

I am ready and enthusiastic about collaborating with you to enhance user confidence in your digital products as a Data Enthusiat focused on ETL (Extract, Transform, Load). I am committed to comprehending your business requirements, objectives, and the target market.

Phone

+62 851 6171 6453

Contact Me
Email

dimasaddriansyah14@gmail.com

Email Me
Location

Kemayoran, Central Jakarta

View on Google Maps