Fungsi Agregat dan Sub Query untuk Melakukan Rekapitulasi Data

Belajar itu bisa dari mana saja dan kapan saja, termasuk dari sosial media. Hari ini saya mendapati sebuah pertanyaan dari salah satu member di group facebook, meskipun bukan secara eksplisit bertanya kepada saya tetapi tiba-tiba muncul di timeline saya. Pertanyaannya berkaitan dengan query SQL untuk melakukan rekapitulasi jumlah siswa dan jumlah siswa yang sudah lunas melakukan pembayaran. Sepertinya TS (Thread Starter) ini sedang mengerjakan suatu aplikasi yang membutuhkan fitur rekap data. Adapun pertanyaan yang muncul di timeline saya bisa dilihat pada gambar berikut:

haicoding.com

Saya berasumsi bahwa untuk mendapatkan hasil sesuai dengan yang diminta ialah dengan menggunakan fungsi agregat SQL dengan mengkombinasikannya menggunakan sub query. Fungsi agregat pada SQL (khususnya MySQL) yang digunakan seperti fungsi SUM dan COUNT. Sedangkan sub query berarti di dalam query terdapat query lagi. Masih terkait dengan asumsi saya, dari kasus ini untuk mendapatkan total nominalnya harus dilakukan di query yang paling dalam, kembaliannya kemudian dilakukan dengan pengkondisian IF pada query yang paling luar.

Saya akan coba selesaikan kasus TS ini dengan mensimulasikannya pada tools online seperti dbfiddle.uk dengan membuat tabel bernama dummy untuk menampung data dummy. Pada kasus TS, nama tabelnya adalah tabel A. Kemudian untuk tabel B merupakan hasil yang diharapkan, yang nantinya didapat dari penggunaan fungsi agregat dan sub-query.

Membuat Tabel Dummy

Untuk membuat tabel dummy pada MySQL dapat menggunakan perintah DDL (Data Definition Language) berikut:

CREATE TABLE dummy (
    nama varchar(10) not null,
    kelas varchar(3) not null,
    pembayaran varchar(10) not null,
    nominal int
);

Perintah di atas akan membuat sebuah tabel bernama dummy yang di dalamnya terdapat 4 field bernama nama, kelas, pembayaran, dan nominal.

Memasukkan Data Dummy

Setelah sebuah tabel terbentuk, kemudian isi beberapa data sekaligus yang disesuaikan dengan kasus TS menggunakan perintah DML (Data Manipulation Language) berikut:

INSERT INTO dummy VALUES
('Ahmad', 'X A', 'Bulanan', 50000),
('Ahmad', 'X A', 'Bulanan', 50000),
('Abdul', 'X B', 'Bulanan', 50000),
('Abdul', 'X B', 'Bulanan', 50000),
('Adi', 'X B', 'Bulanan', 50000),
('Adi', 'X B', 'Bulanan', 25000),
('Budi', 'X A', 'Bulanan', 50000),
('Budi', 'X A', 'Bulanan', 50000);

Perintah di atas akan memasukkan 8 buah baris data ke dalam tabel dummy. Selanjutnya tinggal melakukan query SELECT untuk menampilkan rekapitulasi data sesuai dengan kasus milik TS.

Menampilkan Rekapitulasi Data

Proses rekapitulasi data untuk mendapatkan jumlah siswa dan siswa yang sudah lunas (dikatakan lunas jika sudah bayar total 100.000) ini dapat diselesaikan dengan menggunakan fungsi agregat dan sub query, dengan perintah sebagai berikut:

SELECT 
    a.kelas, 
    COUNT(a.nama) AS jumlah_siswa, 
    SUM(if(a.nominal=100000, 1, 0)) AS siswa_lunas
FROM (
    SELECT nama, kelas, SUM(nominal) AS nominal
    FROM dummy
    GROUP BY nama
) AS a
GROUP BY kelas;

Hasil dari query di atas terlihat seperti pada gambar berikut sesuai dengan yang diharapkan oleh TS.

Proses pembuatan tabel hingga melakukan rekapitulasi data pada tools dbfiddle.uk dapat dilihat pada tautan berikut.

Scroll to Top