Dua proyek sebelumnya mengisi database dari dalam: katalog perpustakaan lewat INSERT, pencatat keuangan lewat modul sqlite3 Python. Di dunia nyata, analisis sering bergerak dari arah sebaliknya — data sudah lebih dulu hidup di tempat lain. Aplikasi kasir mencatat setiap transaksi, lalu mengekspor riwayatnya sebagai berkas CSV. Pekerjaan kita pada proyek ini adalah memindahkan data itu ke SQLite, menjawab pertanyaan bisnis dengan query, lalu mengirim hasilnya kembali keluar sebagai berkas untuk spreadsheet dan program lain.
Studi kasusnya sebuah toko sembako kecil dengan delapan produk pada tiga kategori: Makanan, Minuman, dan Rumah Tangga. Pemilik toko memegang laporan mentah berisi 60 transaksi semester I 2025 (Januari sampai Juni) dan bertanya hal-hal khas pemilik usaha: berapa omzet tiap bulan dan seberapa cepat pertumbuhannya, produk mana yang menopang pendapatan, seberapa besar pangsa tiap kategori, dan ringkasan apa yang pantas naik ke laporan akhir.
Alur kerja proyek dirangkum dalam lima berkas yang dibangun bertahap:
schema.sql— dua tabel (produkdanpenjualan) denganCHECK, foreign key, dua index, plus data master delapan produk,data_penjualan.csv— 60 baris transaksi semester I 2025,import.sql— alur.importbeserta verifikasi jumlah, tipe, dan konsistensi angka,analisis.sql— tujuh query analisis, dari omzet bulanan sampai statistik harian,laporan.sql— laporan akhir sekali jalan plus eksport ke CSV dan JSON.
Hasil Akhir #
Satu perintah sqlite3 penjualan.db < laporan.sql mencetak laporan lengkap ke layar sekaligus menulis dua berkas hasil: laporan-omzet.csv untuk dibuka di spreadsheet dan laporan-produk.json untuk dikonsumsi program lain. Berikut potongan dua bagian pertama dari laporan tersebut:
===== LAPORAN PENJUALAN - SEMESTER I 2025 =====
--- Ringkasan ---
transaksi hari_aktif item_terjual total_omzet
--------- ---------- ------------ -----------
60 48 193 6074000
--- Omzet Bulanan dan Pertumbuhan ---
bulan transaksi omzet pertumbuhan_persen
------- --------- ------- ------------------
2025-01 10 859000
2025-02 10 958000 11.5
2025-03 10 1006000 5.0
2025-04 10 1062000 5.6
2025-05 10 1019000 -4.0
2025-06 10 1170000 14.8 Angka-angka di atas adalah hasil nyata dari data latihan proyek ini: 60 transaksi pada 48 hari aktif menghasilkan omzet Rp6.074.000, dengan satu-satunya penurunan terjadi pada Mei sebelum naik kembali di Juni. Bagaimana setiap angka itu dihitung — dan mengapa bisa dipercaya — adalah isi empat bagian proyek.
Tujuan Pembelajaran #
Setelah menyelesaikan proyek ini, kita mampu:
- merancang skema analisis dua tabel dengan foreign key,
CHECK(termasuk validasi format tanggal), dan index yang dipilih dari pola akses, - mengimpor CSV ke tabel yang skemanya sudah kita kendalikan dengan
.import --csv --skip 1, lalu memverifikasi jumlah baris, tipe kolom, dan konsistensi angka, - menjawab pertanyaan bisnis dengan
GROUP BY,JOIN,LIMIT, dan fungsi tanggalstrftime(), - memakai window functions —
SUM() OVER,RANK() OVER PARTITION BY, danLAG()— untuk omzet kumulatif, peringkat produk, dan pertumbuhan bulan-ke-bulan, - merakit laporan sekali jalan dengan
CREATE TEMP VIEW,.print,.headers, dan.mode, lalu mengekspor hasilnya ke CSV dan JSON.
Prasyarat #
Proyek ini tidak memperkenalkan materi baru, melainkan memakai materi yang sudah dibahas. Chapter yang paling sering dirujuk:
- Export dan Import Data —
.mode,.once,.import, dan jebakan type affinity; Bagian 2 dan Bagian 4 memakainya langsung, - Fungsi Agregat serta Mengelompokan Hasil dengan GROUP BY dan HAVING —
SUM(),COUNT(),AVG(),ROUND()untuk seluruh analisis, - Menggabungkan Tabel dengan JOIN — menggabungkan
penjualankeproduk, - Window Functions —
SUM() OVER,RANK(), danLAG(), - Common Table Expressions — menyusun query bertahap yang mudah dibaca,
- Bekerja dengan Tanggal dan Waktu —
strftime()dandate(), - Constraint pada Tabel, Foreign Key, dan Index dan Pencarian Cepat — materi inti Bagian 1,
- Dot Commands pada sqlite3 CLI —
.print,.headers,.mode,.tables,.once.
Tahapan Pengerjaan #
Proyek dikerjakan dalam empat bagian berurutan. Setiap bagian menghasilkan database yang bisa dipakai penuh:
- Bagian 1: Menyiapkan Skema — merancang tabel
produkdanpenjualan, memilih constraint dan index, menulisschema.sqlberikut data master delapan produk, lalu membuktikan penegakannya bekerja. - Bagian 2: Import Data CSV — mengimpor 60 baris
data_penjualan.csvdengan.import, lalu memverifikasi jumlah, tipe, dan konsistensi angkanya. - Bagian 3: Query Analisis — menyusun tujuh query dalam
analisis.sql: omzet bulanan, produk teratas, pangsa kategori, omzet kumulatif, peringkat produk per kategori, pertumbuhan bulanan, dan statistik harian. - Bagian 4: Laporan dan Eksport — merakit
laporan.sqldengan temp view, mencetak laporan akhir, mengekspor ke CSV dan JSON, lalu menguji seluruh alur dari nol.
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap bagian dibangun di atas berkas bagian sebelumnya.
Berkas Sumber #
Berkas sumber setiap bagian tersedia pada bagian Berkas Sumber di bawah halaman bagian yang bersangkutan. Daftarnya kumulatif: Bagian 2 memuat schema.sql, data_penjualan.csv, dan import.sql; Bagian 3 menambahkan analisis.sql; Bagian 4 memuat kelima berkas sekaligus — keadaan lengkap proyek pada tahap tersebut. Nama database yang dipakai di seluruh proyek adalah penjualan.db.
Rancang tabel produk dan penjualan lengkap dengan CHECK, foreign key, dan index untuk analisis data penjualan.
Buka → # Bagian 2: Import Data CSVImpor 60 baris data penjualan CSV ke SQLite dengan .import lalu verifikasi jumlah, tipe, dan konsistensinya.
Buka → # Bagian 3: Query AnalisisSusun query analisis: omzet bulanan, produk teratas, pangsa kategori, omzet kumulatif, peringkat, dan pertumbuhan.
Buka → # Bagian 4: Laporan dan EksportRakit laporan akhir dengan temp view lalu eksport hasil analisis penjualan ke berkas CSV dan JSON.
Buka →