Query MySQL untuk Range Umur

Beberapa hari yang lalu saya mendapatkan pertanyaan menarik melalui email dari seseorang. Inti pertanyaannya adalah bagaimana perintah query untuk menghitung jumlah mahasiswa berdasarkan range umur. Melalui postingan ini, saya ingin menjawab pertanyaan tersebut secara langkah demi langkah, bagaimana contoh query mysql untuk menampilkan range umur. Semoga bermanfaat.

Contoh Data

Untuk mempermudah pembahasan, kita akan menggunakan contoh data mahasiswa dengan struktur dan data sebagai berikut:

nim nama tgllahir
0111500382 Andy 1982-06-10
0211500220 Indy 1980-02-12
0311500292 Edy 1986-10-10
0911500232 Ani 1988-11-15
1011500299 Ida 1990-12-20
1111500200 Ina 1993-10-12
1211500199 Eni 1995-03-12
1211500333 Uni 1996-01-10

Buatlah terlebih dahulu tabel dan data di atas di MySQL.

Dari tabel di atas, tampilan yang diinginkan adalah sebagai berikut:

RANGE UMUR JUMLAH
… – 20 2
20 – 24 4
25 – 29 2
30 – … 2

Contoh Query MySQL untuk Mencari Umur

Langkah pertama dari data di atas adalah menghitung dan menampilkan umur untuk setiap mahasiswa. Teknik untuk menghitung umur beragam. Saya pernah saya contohkan querynya pada postingan mengenai variasi perintah berhubungan waktu dan tanggal, menggunakan pengurangan tanggal sederhana. Selain teknik tersebut, kita juga bisa menggunakan fungsi timestampdiff() yang tersedia di MySQL.

Berikut ini query dan hasil untuk menghitung umur setiap mahasiswa. Umur dihitung dengan mencari selisih antara tanggal lahir dan tanggal sekarang menggunakan fungsi TIMESTAMPDIFF(). Parameter pertama dari fungsi tersebut adalah “YEAR” untuk menghasilkan format tanggal dalam bentuk tahun saja. Parameter kedua adalah field “tgllahir” yang merupakan tanggal lahir setiap mahasiswa dan parameter ketiga adalah fungsi CURDATE() yang akan menghasilkan tanggal saat ini.

SELECT nim, nama, tgllahir, TIMESTAMPDIFF(YEAR, tgllahir, CURDATE()) AS umur FROM mhs

Hasil eksekusi query tersebut dengan menggunakan tools Adminer adalah:

Hasil Eksekusi Query 1 untuk Mencari Umur
Hasil Eksekusi Query 1 untuk Mencari Umur

Query untuk Mengelompokkan Umur

Lalu bagaimana mengelompokkan umur yang sudah diperoleh pada query sebelumnya ke dalam distribusi (range) tertentu. Secara sederhana, kita akan mengelompokkan umur mahasiswa berdasarkan sebaran distribusi sebagai berikut:

  • < 20 tahun
  • 20-24 tahun
  • 25-29 tahun
  • >= 30 tahun
SELECT
    CASE
        WHEN umur < 20 THEN '... - 20'
        WHEN umur BETWEEN 20 and 24 THEN '20 - 24'
        WHEN umur BETWEEN 25 and 29 THEN '25 - 29'
        WHEN umur >= 30 THEN '30 - ...'
        WHEN umur IS NULL THEN '(NULL)'
    END as range_umur,
    COUNT(*) AS jumlah

FROM (select nim, nama, tgllahir, TIMESTAMPDIFF(YEAR, tgllahir, CURDATE()) AS umur from mhs)  as dummy_table
GROUP BY range_umur
ORDER BY range_umur;

Berikut ini beberapa catatan penting dari query 2 di atas.

  • Untuk nama tabel digantikan dengan tabel dummy yang merupakan hasil perintah query 1 (query untuk menghitung umur).
  • Untuk membuat range umur, digunakan struktur CASE-WHEN-THEN. Penjelasan mengenai struktur kondisi ini dapat ditemukan di dokumentasi MySQL.
  • Fungsi COUNT() digunakan untuk menghitung jumlah record berdasarkan range_umur yang telah ditentukan. Fungsi COUNT() merupakan salah satu fungsi agregasi, sehingga diperlukan tambahan perintah GROUP BY untuk mengelompokkan hasil penjumlahan record. Dalam hal ini dikelompokkan berdasarkan range_umur.
  • Pengurutan dengan ORDER BY dapat ditambahkan agar tampilan menjadi terurut.

Hasil dari perintah query 2 di atas adalah sebagai berikut:

Hasil Query 2 Mengelompokkan Umur
Hasil Query 2 Mengelompokkan Umur

Alternatif lain adalah menggunakan query 3 sebagai berikut:

SELECT
 COUNT(IF(umur < 20,1,NULL)) AS '... - 20',
 COUNT(IF(umur BETWEEN 20 and 24,1,NULL)) AS '20 - 24',
 COUNT(IF(umur BETWEEN 25 and 29,1,NULL)) AS '25 - 29',
 COUNT(IF(umur >= 30,1,NULL)) AS '30 - ...'
FROM (select nim, nama, tgllahir, TIMESTAMPDIFF(YEAR, tgllahir, CURDATE()) AS umur from mhs) as dummy_table;

Terlihat query 3 di atas lebih sederhana dan singkat. Namun demikian, hasilnya ditampilkan dalam bentuk kolom. Perhatikan tampilan hasil query 3 berikut ini! Terlihat bedanya kan dibanding hasil dari query sebelumnya?

Hasil Query 3
Hasil Query 3

Kesimpulan

Pengelompokkan data seperti pada kasus umur yang dibahas di tutorial ini seringkali ditemui dalam pembangunan suatu aplikasi berbasis web. Contoh lainnya adalah distribusi data berdasarkan agama serta berdasarkan nilai tertentu. Tekniknya pun sebenarnya beragam. Tinggal pilih mana yang paling sesuai dan paling sederhana, sesuai kebutuhan masing-masing. Semoga tutorial ini bermanfaat.

Download

Donwload Tutorial ini dalam format PDF di sini.

Berbagi itu indah...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0Digg this

6 comments

Leave a Reply

Your email address will not be published. Required fields are marked *