Uji Coba Query

Konteks:

Pemilik apotek ingin melihat performa penjualan per kategori selama kuartal terakhir 2024 (Oktober–Desember), khusus transaksi berstatus selesai. Laporan ini digunakan untuk menentukan kategori obat mana yang layak ditambah stoknya di awal 2025.

Tampilkan Kolom:

kategori, total_transaksi, total_unit_terjual, total_pendapatan, rata_rata_per_transaksi

Ketentuan:
  • Filter transaksi antara 2024-10-01 sampai 2024-12-31, status selesai.
  • total_transaksi = jumlah transaksi unik yang mengandung obat dari kategori tersebut.
  • total_unit_terjual = SUM(jumlah) dari detail_transaksis.
  • total_pendapatan = SUM(subtotal) dari detail_transaksis.
  • rata_rata_per_transaksi = total_pendapatan / total_transaksi, dibulatkan 2 desimal.
  • Hanya tampilkan kategori dengan total_pendapatan > 100.000.
  • Urutkan dari total_pendapatan tertinggi.
Petunjuk: Kandidat perlu JOIN 3 tabel (transaksis, detail_transaksis, obats), menggunakan GROUP BY kategori, HAVING, dan fungsi agregasi. COUNT(DISTINCT) penting untuk total_transaksi.

Konteks:

Bagian keuangan ingin membandingkan keuntungan bersih yang sudah direalisasikan (dari penjualan selesai) dengan potensi keuntungan yang masih tersimpan di stok untuk setiap obat. Ini membantu memutuskan obat mana yang harus diprioritaskan untuk dipromosikan.

Tampilkan Kolom:

nama_obat, kategori, keuntungan_terealisasi, potensi_keuntungan_stok, total_potensi

Ketentuan:
  • keuntungan_terealisasi = SUM((harga_satuan - harga_beli) × jumlah) dari transaksi selesai.
  • potensi_keuntungan_stok = (harga_jual - harga_beli) × stok_saat_ini dari tabel obat.
  • total_potensi = keuntungan_terealisasi + potensi_keuntungan_stok.
  • Tampilkan semua obat meskipun belum pernah terjual (gunakan LEFT JOIN) — jika belum terjual, keuntungan_terealisasi = 0.
  • Excludasi obat yang sudah expired (expired_at < CURDATE()).
  • Urutkan dari total_potensi tertinggi, tampilkan 15 teratas.
Petunjuk: Gunakan COALESCE untuk menangani NULL pada obat yang belum terjual. Perhatikan kalkulasi antara kolom detail_transaksis dan kolom tabel obats.

Konteks:

Apoteker ingin mendeteksi obat yang pergerakan penjualannya lambat namun tanggal expirednya sudah dekat. Definisi "lambat laku": total terjual selama 6 bulan terakhir di bawah 50 unit.

Tampilkan Kolom:

nama_obat, kategori, stok_saat_ini, total_terjual_6bln, expired_at, sisa_hari, tingkat_risiko

Ketentuan:
  • Hitung total_terjual_6bln dari semua transaksi dalam 6 bulan terakhir dari CURDATE().
  • sisa_hari = DATEDIFF(expired_at, CURDATE()).
  • tingkat_risiko: TINGGI (sisa_hari <= 180 & stok > 0), SEDANG (181-365 & stok > 0), RENDAH (> 365).
  • Hanya tampilkan obat dengan total_terjual_6bln < 50.
  • Jangan tampilkan obat yang sudah expired.
  • Urutkan: tingkat_risiko (TINGGI dulu), lalu sisa_hari terkecil.
Petunjuk: Gunakan CASE WHEN untuk tingkat_risiko. Pengurutan tingkat_risiko string bisa menggunakan CASE tambahan di ORDER BY atau FIELD().
Informasi Tabel

obats: id, nama_obat, kategori, stok, harga_beli, harga_jual, expired_at

transaksis: id, no_transaksi, tanggal, total_harga, status ('selesai', 'pending', 'dibatalkan')

detail_transaksis: id, transaksi_id, obat_id, jumlah, harga_satuan, subtotal

SQL Query Editor