Menampilkan Data Harian, Mingguan, Bulanan dan Tahunan dengan MySQL

Pendahuluan

Dalam praktek sehari-hari seringkali kita dihadapkan pada persoalan untuk menampilkan data per kurun waktu tertentu. Semisal dalam penyajian data laporan transaksi per hari, per minggu, per bulan atau per tahun. Secara umum untuk pengelompokan data (aggregasi data) digunakan klausa GROUP BY pada pernyataan query-nya.Pada tutorial kali ini, kita akan memperlajari pengelompokan data harian, mingguan, bulanan dan tahunan.

Sebelumnya, sebagai persiapan kita buat terlebih dahulu satu tabel untuk keperluan pembelajaran kita, yang sebut saja nama tabelnya adalah `tbl_data` dengan struktur dan contoh data sebagai berikut:

-- -membuat tabel `tbl_data`
DROP TABLE IF EXISTS `tbl_data`;
CREATE TABLE `tbl_data` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`data` varchar(50) NOT NULL,
`tanggal` DATE NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

-- -mengisi tabel `tbl_data`
INSERT INTO `tbl_data`(data,tanggal)
VALUES
('satu','2013-07-07'),
('dua','2013-12-08'),
('tiga','2013-12-21'),
('empat','2014-01-01'),
('lima','2014-01-07'),
('enam','2014-01-07'),
('tujuh','2014-01-15'),
('delapan','2014-02-02'),
('sembilan','2014-02-03'),
('sepuluh','2014-03-01'),
('sebelas','2014-03-14'),
('duabelas','2014-04-05'),
('tigabelas','2014-05-06'),
('empatbelas','2014-06-06'),
('limabelas','2014-06-30'),
('enambelas','2014-07-07'),
('tujuhbelas','2014-07-10');

Field/kolom terpenting dari tabel tersebut adalah field `tanggal` yang bertipe data DATE, yang nantinya kita gunakan sebagai acuan untuk pengelompokkan data. Perlu diperhatikan di sini, untuk mengoptimalkan penggunaan fungsi-fungsi di database MySQL ada baiknya gunakan tipe data yang sesuai dengan peruntukkannya, Semisal untuk field `tanggal` gunakan tipe data DATE,DATETIME atau TIMESTAMP. Penggunaan tipe data VARCHAR untuk field tanggal bisa jadi mudah penggunaannya, namun dapat menimbulkan kesulitan jika diperlukan pengolahan data berdasarkan tanggal, semisal untuk pengurutan, pengelompokan, menghitung selisih hari dan sebagainya.

Pengelompokan Data Harian

Untuk mengelompokkan data berdasarkan tanggal (harian), adalah mudah saja, karena kita mempunyai satu field yang berisi data tanggal yaitu field tanggal maka kita tinggal menggunakan klausa GROUP BY pada field tersebut. Contoh querynya adalah sebagai berikut:

-- -mengelompokkan per hari
SELECT tanggal,COUNT(*) AS jumlah_harian
FROM tbl_data
GROUP BY tanggal;

+------------+---------------+
| tanggal    | jumlah_harian |
+------------+---------------+
| 2013-07-07 |             1 |
| 2013-12-08 |             1 |
| 2013-12-21 |             1 |
| 2014-01-01 |             1 |
| 2014-01-07 |             2 |
| 2014-01-15 |             1 |
| 2014-02-02 |             1 |
| 2014-02-03 |             1 |
| 2014-03-01 |             1 |
| 2014-03-14 |             1 |
| 2014-04-05 |             1 |
| 2014-05-06 |             1 |
| 2014-06-06 |             1 |
| 2014-06-30 |             1 |
| 2014-07-07 |             1 |
| 2014-07-10 |             1 |
+------------+---------------+
16 rows in set (0.00 sec)

Bila diinginkan untuk mencari jumlah data yang nilai field `tanggal` adalah sama dengan tanggal hari ini bisa ditambahkan klausa WHERE tanggal=DATE(NOW()) seperti ini:

-- -cari jumlah data yang tanggalnya adalah hari ini
SELECT tanggal,COUNT(*) AS jumlah_harian
FROM tbl_data
WHERE tanggal=DATE(NOW())
GROUP BY tanggal;

+------------+---------------+
| tanggal    | jumlah_harian |
+------------+---------------+
| 2014-06-30 |             1 |
+------------+---------------+
1 row in set (0.00 sec)

Pengelompokan Data Mingguan

Pengelompokan data per minggu/mingguan dengan MySQL bisa dengan memanfaatkan fungsi YEARWEEK(). Fungsi ini akan mengembalikan nilai minggu ke berapa dalam suatu tahun dari tanggal yang dimasukkan. Contoh implementasinya adalah:

-- -mengelompokkan per minggu
SELECT YEARWEEK(tanggal) AS tahun_minggu,COUNT(*) AS jumlah_mingguan
FROM tbl_data
GROUP BY YEARWEEK(tanggal);

+--------------+-----------------+
| tahun_minggu | jumlah_mingguan |
+--------------+-----------------+
|       201327 |               1 |
|       201349 |               1 |
|       201350 |               1 |
|       201352 |               1 |
|       201401 |               2 |
|       201402 |               1 |
|       201405 |               2 |
|       201408 |               1 |
|       201410 |               1 |
|       201413 |               1 |
|       201418 |               1 |
|       201422 |               1 |
|       201426 |               1 |
|       201427 |               2 |
+--------------+-----------------+
14 rows in set (0.00 sec)

-- -cari jumlah data yang tanggalnya ada di minggu ini
SELECT YEARWEEK(tanggal) AS tahun_minggu,COUNT(*) AS jumlah_mingguan
FROM tbl_data
WHERE YEARWEEK(tanggal)=YEARWEEK(NOW())
GROUP BY YEARWEEK(tanggal);

+--------------+-----------------+
| tahun_minggu | jumlah_mingguan |
+--------------+-----------------+
|       201426 |               1 |
+--------------+-----------------+
1 row in set (0.00 sec)

Pengelompokan Data Bulanan

Dalam pengelompokkan data perbulan kita bisa menggunakan fungsi MONTH() yang akan mengembalikan nilai bulan dari data tanggal yang dimasukkan. Contoh penggunaannya:

-- -mengelompokkan per-bulan
SELECT MONTH(tanggal) AS bulan, COUNT(*) AS jumlah_bulanan
FROM tbl_data
GROUP BY MONTH(tanggal);
+-------+----------------+
| bulan | jumlah_bulanan |
+-------+----------------+
|     1 |              4 |
|     2 |              2 |
|     3 |              2 |
|     4 |              1 |
|     5 |              1 |
|     6 |              2 |
|     7 |              3 |
|    12 |              2 |
+-------+----------------+
8 rows in set (0.00 sec)

Perlu diperhatikan disini, untuk penglompokkan data perbulan, maka data juga perlu dikelompokkan berdasarkan tahun. Untuk keperluan pengelompokkan data berdasarkan tahun kita gunakan fungsi YEAR(). Mengapa perlu penggunaan fungsi YEAR() juga? hal ini karena bisa saja dalam tahun yang berbeda terdapat bulan yang sama. Semisal terdapat data 2013-06-06 dan 2014-06-04, kedua-nya jika hanya menggunakan fungsi MONTH() maka sama-sama akan terpilih datanya meskipun tahunnya berbeda.
Contoh pengelompokkan data perbulan adalah sebagai berikut:

-- -mengelompokkan per-bulan (revisi)
SELECT CONCAT(YEAR(tanggal),'/',MONTH(tanggal)) AS tahun_bulan, COUNT(*) AS jumlah_bulanan
FROM tbl_data
GROUP BY YEAR(tanggal),MONTH(tanggal);

+-------------+----------------+
| tahun_bulan | jumlah_bulanan |
+-------------+----------------+
| 2013/7      |              1 |
| 2013/12     |              2 |
| 2014/1      |              4 |
| 2014/2      |              2 |
| 2014/3      |              2 |
| 2014/4      |              1 |
| 2014/5      |              1 |
| 2014/6      |              2 |
| 2014/7      |              2 |
+-------------+----------------+
9 rows in set (0.00 sec)

-- - cari jumlah data yang tanggalnya Tahun dan bulan ini
SELECT CONCAT(YEAR(tanggal),'/',MONTH(tanggal)) AS tahun_bulan, COUNT(*) AS jumlah_bulanan
FROM tbl_data
WHERE CONCAT(YEAR(tanggal),'/',MONTH(tanggal))=CONCAT(YEAR(NOW()),'/',MONTH(NOW()))
GROUP BY YEAR(tanggal),MONTH(tanggal);

+-------------+----------------+
| tahun_bulan | jumlah_bulanan |
+-------------+----------------+
| 2014/6      |              2 |
+-------------+----------------+
1 row in set (0.00 sec)

Pengelompokan Data Tahunan

Seperti yang sudah dijelaskan sebelumnya, untuk pengelompokkan data pertahun kita menggunakan fungsi YEAR() sebagai berikut:

-- -mengelompokkan per tahun
SELECT YEAR(tanggal) AS tahun, COUNT(*) AS jumlah_tahunan
FROM tbl_data
GROUP BY YEAR(tanggal);

+-------+----------------+
| tahun | jumlah_tahunan |
+-------+----------------+
|  2013 |              3 |
|  2014 |             14 |
+-------+----------------+
2 rows in set (0.00 sec)


-- cari jumlah yang tanggalnya tahun 2014
SELECT YEAR(tanggal) AS tahun, COUNT(*) AS jumlah_tahunan
FROM tbl_data
WHERE YEAR(tanggal)='2014'
GROUP BY YEAR(tanggal);

+-------+----------------+
| tahun | jumlah_tahunan |
+-------+----------------+
|  2014 |             14 |
+-------+----------------+
1 row in set (0.00 sec)

Penutup

Demikian tutorial singkat mengenai pengelompokkan data berdasarkan tanggal, minggu, bulan dan tahun. Semoga bermanfaat dan tidak lagi membuat kita bingung untuk mengelompokkan data atau mencari data berdasarkan suatu kurun waktu.Sebagai bahan pengayaan, dapat dibaca mengenai fungsi-fungsi untuk tipe data DATE dan DATETIME seperti pada tautan di bagian referensi.

Fungsi Terbilang dalam PHP

<?php function Terbilang($satuan)
{
$huruf = array(“”, “Satu”, “Dua”, “Tiga”, “Empat”, “Lima”, “Enam”, “Tujuh”, “Delapan”, “Sembilan”, “Sepuluh”, “Sebelas”);
if ($satuan < 12)
return ” ” . $huruf[$satuan];
elseif ($satuan < 20)
return Terbilang($satuan – 10) . “Belas”;
elseif ($satuan < 100)
return Terbilang($satuan / 10) . ” Puluh” . Terbilang($satuan % 10);
elseif ($satuan < 200)
return ” seratus” . Terbilang($satuan – 100);
elseif ($satuan < 1000)
return Terbilang($satuan / 100) . ” Ratus” . Terbilang($satuan % 100);
elseif ($satuan < 2000)
return ” seribu” . Terbilang($satuan – 1000);
elseif ($satuan < 1000000)
return Terbilang($satuan / 1000) . ” Ribu” . Terbilang($satuan % 1000);
elseif ($satuan < 1000000000)
return Terbilang($satuan / 1000000) . ” Juta” . Terbilang($satuan % 1000000);
elseif ($satuan <= 1000000000)
return Terbilang($satuan / 1000000000) . ” Milyar” . Terbilang($satuan % 1000000000);
elseif ($satuan <= 1000000000000000)
echo “Maaf Tidak Dapat di Prose Karena Jumlah Uang Terlalu Besar “;
}
$rupiah=”1500000”;
echo Terbilang($rupiah). Rupiah;
?> Baca lebih lanjut

Macam-Macam Insert di Mysql

Tag

,

Selain bentuk dasar perintah INSERT, saya mencatat setidaknya ada 7 (tujuh) variasi bentuk perintah INSERT yang saya yakin suatu saat akan berguna untuk Anda. Berikut ini ketujuh perintah INSERT tersebut yang selanjutnya akan saya jelaskan satu per satu.

  1. INSERT INTO (field1, field2, …) VALUES (…)
  2. INSERT … SELECT …
  3. INSERT IGNORE …
  4. INSERT DELAYED …
  5. INSERT LOW PRIORITY | HIGH PRIORITY …
  6. INSERT … ON DUPLICATE KEY UPDATE
  7. REPLACE INTO …

Baca lebih lanjut

Menggabung Beberapa Field Dalam Query Saat Ditampilkan

Pada tulisan ini saya akan berbagi tentang bagaimana menggabung beberapa field database saat ditampilkan ke layar. Untuk melakukan hal ini saya menggunakan teknik penggabungan field dengan fungsi string yang tersedia dalam mysql database.

Misal anda punya sebuah tabel pegawai dengan susunan nip, namadepan, namatengah, namabelakang seperti gambar berikut : Baca lebih lanjut

Menyimpan data dalam Mysql banyak tabel Secara bersamaan

Tag

, ,

Jika anda membuat aplikasi php dan mysql yang menggunakan beberapa tabel dalam sebuah database mungkin akan menemui proses menyimpan data ke dalam banyak tabel secara bersamaan dalam satu proses. Contoh sederhana membuat aplikasi php penjualan yang dalam prosesnya menyimpan data dalam tabel transaksi dan sub transaksi. Baca lebih lanjut

Menghitung Jumlah Numerik Dalam Kolom Tabel MySQL

Jika kita ingin menjumlahkan seluruh isi pada salah satu kolom tabel dengan menggunakan Excel mungkin sangat mudah, tinggal blok kolomnya lalu jalankan perintah SUM. Tentu saja perintah SUM ini berbeda dengan dengan tabel MySQL. Perintah sql SUM harus ditulis dengan script php. Sekarang perhatikanlah bagaimana menerapkan perintah SUM tersebut pada tabel dibawah ini dan menemukan jumlah total sumbangan siswa. Baca lebih lanjut