Analisa Data dengan SQL

Trijaya Eryawan
16 min readJul 3, 2023

--

Pendahuluan

SQL (Structured Query Language) adalah bahasa yang digunakan untuk mengelola dan mengakses basis data relasional. SQL digunakan untuk melakukan operasi seperti pengambilan data, pembaruan data, penghapusan data, dan pengaturan struktur basis data.

SQL (Structured Query Language) adalah bahasa yang digunakan untuk mengelola dan mengakses basis data relasional. SQL digunakan untuk melakukan operasi seperti pengambilan data, pembaruan data, penghapusan data, dan pengaturan struktur basis dataDengan SQL, Anda dapat membuat tabel untuk menyimpan data, menentukan hubungan antara tabel-tabel tersebut, dan melakukan berbagai operasi pengambilan data untuk mendapatkan informasi yang diinginkan. SQL juga menyediakan perintah-perintah untuk mengubah struktur basis data, seperti menambahkan kolom baru, menghapus tabel, atau membuat indeks. Contoh sistem database yang menggunakan SQL antara lain MySQL, PostgreSQL, Microsoft SQL Server, Oracle, dan sistem database lainnya. Kali ini akan dibahas beberapa query berserta contoh persoalan dengan menggunakan PostgreSQL.

Let’s go !!

Dataset

Final project SQL yang akan dikerjakan kali ini menggunakan 4 buah table yaitu tabel order_detail, sku_detail, customer_detail, dan payment_detail. Dataset ini berasal dari data penjualan pada E-Commerce Tokopedia yang telah diubah dengan beberapa perubahan untuk dapat memudahkan dalam praktik dengan menggunakan SQL. Disini saya akan memakai PostgreSQL dan pgadmin4 sebagai alat bantu dalam mengolah dan menampilkan data yang dibutuhkan dalam exercise.

Query untuk memasukkan dataset ke tabel dapat diakses disini. Kita dapat langsung menjalankan query dari file dataset tersebut sehingga pada PostgreSQL dapat kita lihat 4 buah tabel seperti pada gambar di bawah ini jika query berhasil dijalankan.

Tabel atau dataset yang dibentuk dari hasil query data text diatas
Dataset yang dibentuk dari hasil query data text diatas

Setelah itu kita dapat memeriksa dan mempelajari keempat dataset ini dengan menjalankan query berikut satu-persatu dan hasilnya dapat dilihat pada gambar berikutnya.

query untuk menampilkan dataset
customer_detail dataset
order_detail dataset
payment_detail dataset
sku_detail dataset

Berikut adalah penjelasan mengenai dataset yang akan digunakan:

order_detail:

  1. id → angka unik dari order / id_order
  2. customer_id → angka unik dari pelanggan
  3. order_date → tanggal saat dilakukan transaksi
  4. sku_id → angka unik dari produk (sku adalah stock keeping unit)
  5. price → harga yang tertera pada tagging harga
  6. qty_ordered → jumlah barang yang dibeli oleh pelanggan
  7. before_discount → nilai harga total dari produk (price * qty_ordered)
  8. discount_amount → nilai diskon product total
  9. after_discount → nilai harga total produk ketika sudah dikurangi dengan diskon
  10. is_gross → menunjukkan pelanggan belum membayar pesanan
  11. is_valid → menunjukkan pelanggan sudah melakukan pembayaran
  12. is_net → menunjukkan transaksi sudah selesai
  13. payment_id → angka unik dari metode pembayaran

sku_detail:

  1. id → angka unik dari produk (dapat digunakan untuk key saat join)
  2. sku_name → nama dari produk
  3. base_price → harga barang yang tertera pada tagging harga / price
  4. cogs → cost of goods sold / total biaya untuk menjual 1 produk
  5. category → kategori produk

customer_detail:

  1. id → angka unik dari pelanggan
  2. registered_date → tanggal pelanggan mulai mendaftarkan diri sebagai anggota

Payment_detail:

  1. id → angka unik dari metode pembayaran
  2. payment_method → metode pembayaran yang digunakan

Di bawah ini adalah penjelasan tentang perintah yang digunakan dalam kueri di atas.

A. Perintah SELECT digunakan untuk memilih field atau kolom mana yang ingin ditampilkan dalam hasil kueri.

B. Tanda “*” digunakan untuk memilih semua field yang ada dalam tabel.

C. FROM nama_tabel adalah sintaks yang menunjukkan data yang akan diekstrak dari tabel mana.

Dapat dilihat bahwa keempat tabel tersebut saling terhubung atau berhubungan melalui field “id”. Hal ini menunjukkan adanya relasi antara tabel-tabel tersebut. Setelah itu, kita akan membahas beberapa permasalahan atau isu yang muncul dari dataset yang kita miliki.

Permasalahan dan Penyelesaian

QUESTION 1 :

Selama transaksi yang terjadi selama 2021, pada bulan apa total nilai transaksi (after_discount) paling besar? Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail

Dari permintaan data diatas kita dapat memakai kueri sebagai berikut menggunakan filter “is_valid = 1” dan source table “order_detail” :

Query :

Query Total Nilai Transaksi selama 2021

Penjelasan (Logic) :

• DATE_PART mengambil bulan dari tanggal order_date.

• SUM menjumlahkan total nilai transaksi (after_discount).

• Melakukan filtering dengan kondisi WHERE untuk memastikan tahun order_date adalah 2021 dan is_valid = 1.

• “is_valid = 1”, berarti transaksi tersebut dianggap valid atau sah.

• GROUP BY mengelompokkan hasil berdasarkan bulan.

• ORDER BY mengurutkan hasil berdasarkan total nilai transaksi secara menurun (DESC).

  • LIMIT 5 untuk mendapatkan 5 bulan dengan total nilai transaksi terbesar.

Hasil dari kueri diatas adalah :

Tabel 1. Hasil Query Total Nilai Transaksi selama 2021

Kesimpulan : Pada tahun 2021, Total nilai transaksi paling besar adalah di BULAN 11 dengan total nilai transaksi sebesar : 4.783.379.762,46

QUESTION 2 :

Selama transaksi yang terjadi selama 2021, pada bulan apa total jumlah pelanggan (unique), total order (unique) dan total jumlah kuantitas produk paling banyak? Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail

Dari permintaan data diatas kita dapat memakai kueri sebagai berikut menggunakan filter “is_valid = 1” dan source table “order_detail” dan “sku_detail” :

Query :

Query Total Jumlah Pelanggan, Order, Jumlah Kuantitas Produk selama 2021

Penjelasan (Logic) :

  • DATE_PART mengambil bulan dari tanggal order_date sebagai “Bulan Transaksi”
  • COUNT DISTINCT pada “customer_id” untuk menghitung jumlah pelanggan unik sebagai ‘total_pelanggan’.
  • COUNT DISTINCT pada “id” untuk mendapatkan id pelanggan yang unik sebagai ‘total_order’.
  • SUM menjumlahkan total kuantitas produk (qty_ordered) sebagai ‘banyak_produk’
  • Melakukan filtering dengan kondisi WHERE untuk memastikan tahun order_date adalah 2021
  • “is_valid = 1”, berarti transaksi tersebut dianggap valid atau sah.
  • GROUP BY mengelompokkan hasil berdasarkan bulan.
  • ORDER BY mengurutkan hasil berdasarkan ‘total pelangggan’, ‘total order’, dan ‘banyak produk’ secara menurun (DESC).
  • LIMIT 5 untuk mendapatkan 5 bulan dengan total nilai transaksi terbesar.

Hasil dari kueri diatas adalah :

Tabel 2. Hasil Query Total Jumlah Pelanggan, Order, Jumlah Kuantitas Produk selama 2021

Kesimpulan : Pada tahun 2021, Total Jumlah Pelanggan = 13.885 orang, Total Order = 22.414, dan Total jumlah kuantitas produk = 47.385 pcs, paling banyak pada Bulan 11.

QUESTION 3 :

Selama transaksi yang terjadi selama 2022, kategori apa yang menghasilkan nilai transaksi paling besar? Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail

Dari permintaan data diatas kita perlu menganalisis data transaksi pada tahun 2022 dan mencari kategori dengan nilai transaksi tertinggi. Kita juga akan menggabungkan tabel transaksi dan tabel kategori berdasarkan kolom kunci yang sesuai. Setelah itu, menghitung total nilai transaksi untuk setiap kategori dan mengurutkannya dalam urutan menurun.

Query :

Query Kategori dengan Nilai Transaksi Terbesar selama 2022

Penjelasan (Logic) :

  • SELECT, memilih kolom s.category untuk menampilkan kategori produk dan menggunakan fungsi SUM(o.after_discount) untuk menghitung total penjualan dengan mengakumulasikan nilai o.after_discount sebagai total_sales.
  • FROM, menggunakan tabel order_detail sebagai tabel utama dalam kueri sebagai o.
  • LEFT JOIN, menggabungkan tabel order_detail dengan tabel sku_detail sebagai s dengan mengambil kolom o.sku_id yang sama dengan s.id. Ini memungkinkan kita untuk mengambil informasi kategori produk dari tabel sku_detail atau s.
  • WHERE digunakan untuk menerapkan kondisi filter pada data. Kondisi is_valid = 1 digunakan untuk memastikan bahwa hanya data dengan nilai is_valid = 1 yang akan diikutsertakan dalam perhitungan.
  • Kondisi EXTRACT(YEAR FROM order_date) = 2022 digunakan untuk memfilter data tahun 2022.
  • Dalam GROUP BY 1, kita mengelompokkan hasil berdasarkan kolom pertama dalam SELECT, yaitu s.category.
  • Dalam ORDER BY 2 DESC, kita mengurutkan hasil secara menurun berdasarkan kolom kedua dalam SELECT, yaitu total_sales.
  • Terakhir, dengan menggunakan LIMIT 5, kita membatasi hasil query hanya menampilkan 5 baris data dengan total_sales terbesar.

Hasil dari kueri diatas adalah :

Tabel 3. Hasil Query Kategori dengan Nilai Transaksi Terbesar selama 2022

Kesimpulan : Kategori yang menghasilkan nilai transaksi paling besar pada tahun 2022 adalah Mobile & Tablets dengan total penjualan 8.556.323.757.

Question 4 :

Bandingkan nilai transaksi dari masing-masing kategori pada tahun 2021 dengan 2022. Sebutkan kategori apa saja yang mengalami peningkatan dan kategori apa yang mengalami penurunan nilai transaksi dari tahun 2021 ke 2022. Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail

Untuk menjawab pertanyaan di atas, pertama-tama kita perlu untuk melakukan breakdown atas penyelesaian masalahnya sebagai berikut :

  • Membuat kueri mengenai total penjualan produk tahun 2021 (sebagai tahun_2021) dan total penjualan produk tahun 2022 (sebagai tahun_2022) berdasarkan category produk.
  • membuat common table expression (CTE) sebagi tabel yang mengekspresikan total penjualan (total_sales) per kategori produk pada tahun 2021 dan 2022.
  • menampilkkan data dari CTE, dan dilakukan perhitungan nilai pertumbuhan penjualan dengan mengurangi total penjualan tahun 2021 (total_sales_2021) dari total penjualan tahun 2022 (total_sales_2022).untuk membandingkan nilai transaksi dari masing-masing kategori pada tahun 2021 dengan 2022.

Query :

Query Total Penjualan Produk 2022
Query Total Penjualan Produk 2021
Query Common Table Expression (CTE)
Query Block Run Perbandingan Nilai Transaksi berdasarkan Kategori pada 2021 dan 2022

Penjelasan (Logic) :

  • Pada bagian WITH, kita menggunakan CTE untuk mendefinisikan “total_sales_2021” dan “total_sales_2022”.
  • Setelah definisi CTE, kita melakukan SELECT dari CTE “total_sales_2021” (sebagai “s”) dan “total_sales_2022” (sebagai “s”).
  • Dalam SELECT ini, kita memilih kolom tertentu dari CTE “o” dan “s” seperti o.category, o.total_sales, dan s.total_sales. Selain itu, kita juga menambahkan kolom baru dengan alias “banding”, yang merupakan selisih antara total_sales_2022 dan total_sales_2021.
  • INNER JOIN dilakukan dengan mengambil kolom category dari kedua CTE.
  • Pada bagian ORDER BY, kita mengurutkan hasil berdasarkan kolom keempat (alias “banding”) secara menurun.

Hasil Kueri seperti berikut :

Tabel 4. Perbandingan Nilai Transaksi berdasarkan Kategori pada 2021 dan 2022

Kesimpulan :

Dari hasil kueri diperoleh kesimpulan :

  • Kategori yang mengalami peningkatan penjualan dari tahun 2021 ke 2022 adalah Mobiles & Tablets, Women Fashion, Entertainment, Appliances, Superstore, Computing, Kids & Baby, Beauty & Grooming, Helaths & Sports, Home & Living, dan School & Education
  • Kategori yang mengalami penurunan penjualan dari tahun 2021 ke 2022 adalah Men Fashion, Books, Soghaat, dan Others.

QUESTION 5 :

Tampilkan Top 10 sku_name (beserta kategorinya) berdasarkan nilai transaksi yang terjadi selama tahun 2022. Tampilkan juga total jumlah pelanggan (unique), total order (unique) dan total jumlah kuantitas. Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail

Pada pertanyaan ini, kita akan menampilkan Top 10 sku_name (beserta kategorinya) berdasarkan nilai transaksi selama tahun 2022. Selain itu, juga akan ditampilkan total jumlah pelanggan (unique), total order (unique), dan total jumlah kuantitas.

Query :

Penjelasan (Logic) :

  • SELECT : memilih kolom yang akan ditampilkan pada tabel yaitu sku_name dan category dari tabel sku_detail,
  • pada SELECT juga kita akan menampilkan kolom baru : COUNT(distinct o.customer_id) AS total_pelanggan, COUNT(distinct o.id) AS total_order, SUM(o.qty_ordered) AS total_kuantitas, dan SUM(o.after_discount) AS total_sales
  • FROM dari tabel order_detail
  • INNER JOIN dilakukan dengan mengambil kolom sku_id dari tabel order_detail dan sku_detail
  • filter dilakukan dengan is_valid = 1 dan hanya menampilkan order_date dari tahun 2022 (EXTRACT(YEAR FROM order_date) = 2022)
  • GROUP BY untuk mengelompokkan berdasarkan sku_name dan category
  • ORDER BY mengurutkan dari SUM(o.after_discount) AS total_sales secara menurun dan;
  • LIMIT 10 membatasi sampai 10 data saja.

Hasil Kueri adalah sebagai berikut :

Tabel Top 5 sku_name (nama produk) berdasarkan Nilai Transaksi selama 2022

Kesimpulan : dari tabel diatas dapat dilihat bahwa dari 10 Top Nama Produk, yang memiliki Total Pelanggan, Total Order, Total Jumlah, dan Total Penjualan terbesar adalah produk Idroid_BALRX7-Gold.

QUESTION 6

Tampilkan top 5 metode pembayaran yang paling populer digunakan selama 2022 (berdasarkan total unique order). Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, payment_method

Berdasarkan permasalahan yang telah disebutkan di atas, kita akan menganalisis data untuk menentukan Top 5 metode pembayaran yang paling populer digunakan selama tahun 2022, Untuk melakukan analisis ini, kita akan menggunakan data dari tabel order_detail dan payment_method.

Query :

Query Top 5 Metode Pembayaran

Penjelasan (Logic) :

· Pada bagian SELECT, kita memilih kolom payment_method dari tabel payment_detail dan menggunakan fungsi COUNT(DISTINCT od.id) untuk menghitung jumlah total order yang unik dari tabel order_detail.

· Dalam FROM, kita melakukan join antara tabel order_detail (od) dan payment_detail (pd) berdasarkan kolom payment_id.

· Pada bagian WHERE, kita memfilter data dengan menggunakan kondisi AND EXTRACT(YEAR FROM order_date) = 2022 untuk membatasi transaksi yang terjadi selama tahun 2022. Selain itu, juga terdapat kondisi is_valid = 1 untuk memastikan hanya data transaksi yang valid yang digunakan.

· Dalam GROUP BY, kita mengelompokkan hasil berdasarkan kolom payment_method untuk menghitung total order yang unik untuk setiap metode pembayaran.

· Hasil query diurutkan secara menurun berdasarkan jumlah total_order dengan menggunakan ORDER BY 2 DESC, dimana 2 mengacu pada urutan kolom dalam SELECT.

· Hanya 5 hasil teratas yang ditampilkan dengan menggunakan LIMIT 5.

Hasil dari query diatas adalah :

Tabel 7. Hasil Kueri Top 5 Metode Pembayaran Terpopuler selama 2022

Kesimpulan :

QUESTION 7

Urutkan dari ke-5 produk ini berdasarkan nilai transaksinya.

  1. Samsung
  2. Apple
  3. Sony
  4. Huawei
  5. Lenovo

Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail

Untuk menyelesaikan soal di atas, kita akan menggunakan konsep sub-query atau CTE dalam menuliskannya. Kita perlu mengambil data nilai transaksi untuk setiap produk dari tabel order_detail dan sku_detail, lalu mengurutkannya secara menurun berdasarkan nilai transaksi.

Query :

Query Urutan 5 Produk berdasarkan Nilai Transaksi

Penjelasan (Logic) :

  • WITH: Digunakan untuk membuat subquery dengan nama alias “produk”. Subquery ini akan menghasilkan dataset yang akan digunakan dalam pernyataan SELECT utama.
  • SELECT: Digunakan untuk memilih kolom-kolom yang akan ditampilkan dalam hasil query.
  • CASE: Merupakan fungsi yang digunakan untuk melakukan evaluasi kondisi. Dalam query ini, digunakan dalam pernyataan SELECT untuk melakukan pemetaan merek berdasarkan nama produk (sku_name). Jika kondisi sesuai, maka merek tersebut ditetapkan.
  • LOWER(): Fungsi ini digunakan untuk mengubah teks menjadi huruf kecil. Dalam query ini, digunakan untuk mengubah sku_name menjadi huruf kecil agar pencarian kata kunci merek dapat dilakukan tanpa memperhatikan perbedaan besar kecil huruf.
  • LIKE: Operator LIKE digunakan untuk melakukan pencarian pola string. Dalam query ini, digunakan untuk mencocokkan sku_name dengan kata kunci merek tertentu.
  • SUM(): Fungsi ini digunakan untuk menghitung total nilai dari suatu kolom. Dalam query ini, digunakan untuk menghitung total nilai transaksi (total_sales) dari tabel order_detail untuk setiap merek.
  • FROM: Digunakan untuk menentukan tabel sumber data dari mana data akan diambil. Dalam query ini, digunakan untuk mengambil data dari tabel order_detail (od) dan sku_detail (sd) dengan melakukan join berdasarkan kolom sku_id.
  • LEFT JOIN: Merupakan jenis join yang mengembalikan semua baris dari tabel kiri (order_detail) dan baris yang cocok dari tabel kanan (sku_detail) berdasarkan kondisi yang diberikan.
  • WHERE: Digunakan untuk menerapkan kondisi filter pada baris yang akan diambil dari tabel sumber data. Dalam query ini, digunakan untuk memfilter data dengan kondisi is_valid = 1 untuk memastikan hanya data transaksi yang valid yang akan digunakan.
  • GROUP BY: Digunakan untuk mengelompokkan baris berdasarkan satu atau lebih kolom. Dalam query ini, digunakan untuk mengelompokkan data berdasarkan kolom pertama dalam pernyataan SELECT (product_brand).
  • NOT NULL: Kondisi yang digunakan dalam klausa WHERE untuk memastikan bahwa hanya merek yang memiliki nilai product_brand tidak null yang akan ditampilkan.
  • ORDER BY: Digunakan untuk mengurutkan hasil query berdasarkan kolom tertentu. Dalam query ini, digunakan untuk mengurutkan data berdasarkan total_sales secara menurun (desc).

Hasil dari query diatas :

Tabel Penjualan 5 Brand ternama

Kesimpulan :

QUESTION 8

Seperti pertanyaan no. 3, buatlah perbandingan dari nilai profit tahun 2021 dan 2022 pada tiap kategori. Kemudian buatlah selisih % perbedaan profit antara 2021 dengan 2022 (profit = after_discount — (cogs*qty_ordered)). Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail

Untuk menjawab pertanyaan ini, kita perlu menghitung nilai profit untuk tahun 2021 dan 2022 pada tiap kategori, kemudian menghitung selisih persentase perbedaan profit antara kedua tahun tersebut.

Query :

Query Urutan Penjualan 5 Brand Ternama

Penjelasan (Logic) :

  • Pada bagian WITH, kita menggunakan CTE untuk mendefinisikan “profit_2021” dan “profit_2022”.
  • Setelah definisi CTE, kita melakukan SELECT dari CTE “profit_2021” (sebagai “s”) dan “profit_2022” (sebagai “s”).
  • Dalam SELECT ini, kita memilih kolom tertentu dari CTE “o” dan “s” seperti o.category, o.profit, dan s.profit. Selain itu, kita juga menambahkan kolom baru dengan alias “banding”, yang merupakan selisih antara total_profit_2022 dan total_profit_2021; serta kolom persentase perbedaan profit (o.profit s.profit)/o.profit*100
  • INNER JOIN dilakukan dengan mengambil kolom category dari kedua CTE.
  • Group By berdasarkan kolom kategori, total profit 2022, total profit 2021
  • Pada bagian ORDER BY, kita mengurutkan hasil berdasarkan kolom keempat (alias “banding”) secara menurun.

Kueri ini harus dijalankan dengan memblok semua syntax yang ada dan di “run” agar menghasilkan data seperti yang diingin. Setelah dilakukan block run semua syntax diatas maka hasil yang diperoleh berupa table.

Hasil dari Query diatas adalah :

Tabel Perbandingan Nilai Prodit tahun 2021 dan 2022 berdasarkan kategori
Grafik Perbandingan Nilai Profit tahun 2021 dan 2022 berdasarkan kategori

Kesimpulan :

Dari hasil query diatas akan diperoleh tabel dan grafik dengan kolom perbandingan dari nilai profit tahun 2021 dan 2022 pada tiap kategori dan selisih % perbedaan profit antara 2021 dengan 2022. Tabel tersebut memuat bahwa :

  • Kategori “Women Fashion” mempunyai selisih % perbedaan profit yang paling tinggi yaitu 62,5%; sehingga dapat dikatakan kategori ini mempunyai kenaikan keuntungan yang paling tinggi.
  • Kategori “Books” mengalami penurunan profit yang paling besar dimana persen profitnya adalah -(130 %), sehingga patut menjadi perhatian user apakah perlu dipertahankan dengan menerapkan kiat-kiat pemasaran yang advanced atau tidak lagi menjual kategori ini.
  • Meskipun secara nilai, kategori “Mobiles & Tablets” mempunyai kenaikan profit yang paling besar namun persen profitnya bukan yang tertinggi yaitu 15,4 %. Tapi secara umum kenaikannya cukup signifikan.

QUESTION 9

Tampilkan top 5 SKU dengan kontribusi profit paling tinggi di tahun 2022 berdasarkan kategori paling besar pertumbuhan profit dari 2021 ke 2022 (berdasarkan hasil no 8). Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail

Untuk menjawab soal di atas kita dapat melihat visualisasi grafik pertumbuhan penjualan berdasarkan kategori pada soal sebelumnya , dapat dilihat bahwa kategori “Woman Fashion” memiliki pertumbuhan penjualan paling tinggi dari 2021 ke 2022.

Oleh karena itu kita akan menentukan top 5 SKU dengan total profit tertinggi pada kategori “Women Fashion” selama tahun 2022.

Query :

Penjelasan :

· Pada bagian pertama query (with a as …), dilakukan subquery untuk mengambil data yang diperlukan dari tabel order_detail (o) dan sku_detail (s). Subquery tersebut memberikan alias “tabel” pada hasilnya.

· Dalam subquery “tabel”, dipilih kolom-kolom yang dibutuhkan, yaitu id, sku_name, dan profit. Profit dihitung dengan mengurangi nilai after_discount dengan perkalian antara cogs (cost of goods sold) dan qty_ordered. Subquery ini juga menerapkan beberapa kondisi sebagai filter:

· is_valid = 1 digunakan untuk memastikan hanya data yang valid yang diperhitungkan.

· to_char(order_date, ‘yyyy-mm-dd’) between ‘2022–01–01’ and ‘2022–12–31’ mengambil data transaksi yang terjadi selama tahun 2022.

· s.category = ‘Women Fashion’ memfilter data hanya pada kategori “Women Fashion”.

· Setelah subquery “tabel” terbentuk, query utama akan menjalankan pengelompokan (GROUP BY) berdasarkan sku_name dan melakukan penjumlahan (SUM) pada kolom profit untuk setiap SKU.

· Hasilnya diurutkan secara menurun (DESC) berdasarkan total_profit, dan hanya top 5 SKU dengan total profit tertinggi yang akan ditampilkan (LIMIT 5)

Hasil dari query diatas ditampilkan dalam tabel berikut :

Tabel 9. Top 5 Produk dengan kontribusi profit paling tinggi di tahun 2022 dari Kategori Women Fashion

Dari query diatas diperoleh bahwa dari kategori “Women Fashion” 5 SKU yang mempunyai profit paling tinggi adalah :

1. “sanasafinaz_SS-3A” 3.498.908

2. “sanasafinaz_SS-9B” 3.153.692

3. “sanasafinaz_SS-13A” 3.013.622

4. “sanasafinaz_SS-5B” 2.902.320

5. “sanasafinaz_SS-10A” 2.871.696

Untuk memudahkan membaca table, berikut ditampilkan grafik berdasarkan table tersebut :

Grafik Top 5 SKU dengan kontribusi profit paling tinggi di tahun 2022 berdasarkan kategori Women & Fashion

QUESTION 10

Tampilkan jumlah unique order yang menggunakan top 5 metode pembayaran (soal no 6) berdasarkan kategori produk selama tahun 2022. Gunakan is_valid = 1 untuk memfilter data transaksi. Source table: order_detail, sku_detail.

Untuk menjawab pertanyaan di atas kita akan menghitung jumlah unique order yang menggunakan metode pembayaran tertentu (cod, Easypay, Payaxis, customercredit, jazzwallet) berdasarkan kategori produk selama tahun 2022.

Query

Berikut adalah query yang digunakan untuk menyelesaikan permasalahan di atas :

Query menampilkan jumlah unique order dari Top 5 metode pembayaran

Penjelasan (Logic) :

· SELECT sd.category: Memilih kolom ‘category’ dari tabel sku_detail untuk ditampilkan dalam hasil query.

· COUNT(DISTINCT CASE WHEN pd.payment_method = ‘cod’ THEN od.id END) cod: Menghitung jumlah unique order (berdasarkan kolom ‘id’) yang menggunakan metode pembayaran ‘cod’ .

· COUNT(DISTINCT CASE WHEN pd.payment_method = ‘Easypay’ THEN od.id END) easypay: Menghitung jumlah unique order yang menggunakan metode pembayaran ‘Easypay’ .

· COUNT(DISTINCT CASE WHEN pd.payment_method = ‘Payaxis’ THEN od.id END) payaxis: Menghitung jumlah unique order yang menggunakan metode pembayaran ‘Payaxis’ .

· COUNT(DISTINCT CASE WHEN pd.payment_method = ‘customercredit’ THEN od.id END) customercredit: Menghitung jumlah unique order yang menggunakan metode pembayaran ‘customercredit’.

· COUNT(DISTINCT CASE WHEN pd.payment_method = ‘jazzwallet’ THEN od.id END) jazzwallet: Menghitung jumlah unique order yang menggunakan metode pembayaran ‘jazzwallet’ .

· FROM order_detail od: Menentukan tabel utama yang digunakan dalam query adalah order_detail.

· LEFT JOIN payment_detail pd ON pd.id = od.payment_id: Melakukan left join dengan tabel payment_detail berdasarkan kolom ‘id’ untuk mendapatkan informasi metode pembayaran.

· LEFT JOIN sku_detail sd ON sd.id = od.sku_id: Melakukan left join dengan tabel sku_detail berdasarkan kolom ‘id’ untuk mendapatkan informasi kategori produk.

· WHERE is_valid = 1 AND to_char(order_date, ‘yyyy-mm-dd’) BETWEEN ‘2022–01–01’ AND ‘2022–12–31’: Menambahkan kondisi WHERE untuk memfilter data berdasarkan validitas transaksi (is_valid = 1) dan rentang tanggal transaksi pada tahun 2022.

· GROUP BY 1: Mengelompokkan hasil berdasarkan kolom ‘category’.

· ORDER BY 2 DESC: Mengurutkan hasil secara menurun berdasarkan jumlah unique order dalam metode pembayaran tertentu.

Hasil dari query diatas adalah :

Tabel Jumlah Order berdasarkan 5 Top Metode Pembayaran tahun 2022

Kesimpulan :

Berdasarkan tabel di atas, dapat disimpulkan bahwa metode pembayaran ”cod” paling banyak digunakan untuk setiap transaksi yang terjadi selama tahun 2022 berdasarkan kategori produk.

Terlihat juga dalam grafik dibawah :

Grafik Jumlah Order berdasarkan 5 Top Metode Pembayaran tahun 2022

Dengan berakhirnya pembahasan mengenai 10 persoalan dalam analisis data dan penggunaan perintah, fungsi, kata kunci, dan klausa dalam SQL menggunakan PostgreSQL, saya berharap pembahasan ini akan memberikan manfaat yang berarti bagi para pembaca dan mereka yang mencoba menerapkannya.

Tuhan memberkati.

--

--