Halo para Code Enthusiast dan Pejuang Backend! 👨💻👩💻
Pernah kepikiran nggak, gimana caranya aplikasi Kasir (POS) Cafe bisa menampilkan grafik keren di dashboard yang isinya:
-
"Kopi Susu Gula Aren adalah menu paling laku bulan ini!"
-
"Total omzet hari ini: Rp 5.000.000."
Padahal, data di database-mu isinya cuma ribuan baris riwayat transaksi yang memusingkan.
Rahasia di balik laporan yang rapi itu bukan sihir, tapi kekuatan SQL Aggregate Functions dan klausa sakti bernama GROUP BY.
Kalau kamu lagi belajar bikin sistem informasi atau mau paham jeroan source code POS, materi ini wajib kamu kuasai. Yuk, kita bedah!
Studi Kasus: Database Cafe
Anggap kita punya sebuah tabel di database MySQL bernama detail_transaksi yang mencatat setiap item yang dipesan pelanggan. Isinya kira-kira begini:
| id | nama_menu | qty | harga_satuan | tanggal |
| 1 | Kopi Susu | 2 | 15000 | 2024-01-01 |
| 2 | Kentang Goreng | 1 | 20000 | 2024-01-01 |
| 3 | Kopi Susu | 1 | 15000 | 2024-01-02 |
| 4 | Teh Manis | 5 | 5000 | 2024-01-02 |
| 5 | Kopi Susu | 3 | 15000 | 2024-01-02 |
Data mentah di atas susah dibaca oleh pemilik cafe. Mereka butuh ringkasan. Di sinilah kita beraksi.
Kenalan dengan GROUP BY (Si Pengelompok)
Bayangkan kamu punya keranjang cucian kotor yang campur aduk. GROUP BY adalah proses memisahkan cucian itu ke tumpukan berbeda: tumpukan kaos, tumpukan celana, tumpukan kemeja.
Di SQL, GROUP BY nama_menu artinya: "Tolong kumpulkan semua baris data yang punya nama menu sama jadi satu kelompok."
Kenalan dengan Aggregate Functions (Si Tukang Hitung)
Setelah dikelompokkan, kita mau apain tumpukan itu? Kita butuh fungsi "Agregat" untuk menghitungnya:
-
SUM(): Menjumlahkan nilai (Contoh: Total Qty, Total Harga). -
COUNT(): Menghitung jumlah baris/transaksi (Contoh: Berapa kali dipesan).
Praktek 1: Laporan "Menu Terlaris" (Best Seller)
Misi: Bos ingin tahu, menu apa yang secara kuantitas (qty) paling banyak terjual?
Logika: Kita perlu mengelompokkan data berdasarkan nama_menu, lalu menjumlahkan qty di setiap kelompok.
Query SQL:
SELECT nama_menu, SUM(qty) AS total_terjual
FROM detail_transaksi
GROUP BY nama_menu
ORDER BY total_terjual DESC;
Hasilnya: | nama_menu | total_terjual | | :--- | :--- | | Kopi Susu | 6 | | Teh Manis | 5 | | Kentang Goreng | 1 |
Penjelasan: Database melihat ada tiga "tumpukan": Kopi Susu, Teh Manis, dan Kentang Goreng. Kemudian fungsi SUM(qty) bekerja:
-
Kopi Susu: 2 + 1 + 3 = 6
-
Teh Manis: 5 = 5
-
Kentang Goreng: 1 = 1 Terakhir,
ORDER BY ... DESCmengurutkannya dari yang terbesar. Voila! Jadi deh laporan menu terlaris.
Praktek 2: Laporan "Total Omzet Harian"
Misi: Bos ingin tahu, berapa duit yang didapat per harinya?
Logika: Kita perlu mengelompokkan data berdasarkan tanggal, lalu kita hitung total uangnya. Total uang didapat dari qty dikali harga_satuan.
Query SQL:
SELECT tanggal, SUM(qty * harga_satuan) AS omzet_harian
FROM detail_transaksi
GROUP BY tanggal;
Hasilnya: | tanggal | omzet_harian | | :--- | :--- | | 2024-01-01 | 50000 | | 2024-01-02 | 85000 |
Penjelasan: GROUP BY tanggal memisahkan data jadi dua tumpukan tanggal (Tgl 01 dan Tgl 02). Lalu SUM(qty * harga_satuan) menghitung total pendapatan di masing-masing tanggal tersebut.
Kesimpulan
Query GROUP BY yang dikombinasikan dengan SUM() atau COUNT() adalah fondasi dari semua Business Intelligence dan dashboard laporan di aplikasi manapun.
Terlihat simpel, tapi kalau datanya sudah jutaan baris, query ini sangat powerful!
Merasa Pusing dengan Query di Atas?
Tenang, itu wajar kok bagi pemula. Membangun logika laporan yang akurat memang butuh jam terbang.
Kalau kamu sedang butuh aplikasi POS Cafe & Resto yang siap pakai, dan nggak mau pusing mikirin kodingan query laporan yang njelimet ini, Source Code POS Cafe yang saya sediakan sudah memiliki fitur Dashboard Reporting otomatis.
Semua query rumit tadi sudah tertanam di dalamnya. Kamu tinggal klik, laporan langsung jadi!
Happy coding (or happy deploying)! 🚀