Sering kali, kita perlu mengisi tanggal yang hilang dalam data MySQL, dengan mengisi baris yang hilang untuk tanggal tersebut. Berikut cara mengisi tanggal yang hilang dan celah urutan tanggal untuk membuat laporan penjualan yang benar tanpa ada baris yang hilang.
Bagaimana cara mengisi tanggal yang hilang di MySQL?
Berikut adalah langkah-langkah untuk mengisi tanggal yang hilang di MySQL. Katakanlah Anda memiliki tabel berikut penjualan(tanggal_pesanan, obral)
mysql> create table sales(order_date date,sale int); mysql> insert into sales(order_date,sale) values('2020-04-01',212), ('2020-04-04',220), ('2020-04-05',120), ('2020-04-07',200), ('2020-04-08',222), ('2020-04-10',312), ('2020-04-11',225), ('2020-04-12',212); mysql> select * from sales; +------------+------+ | order_date | sale | +------------+------+ | 2020-04-01 | 212 | | 2020-04-04 | 220 | | 2020-04-05 | 120 | | 2020-04-07 | 200 | | 2020-04-08 | 222 | | 2020-04-10 | 312 | | 2020-04-11 | 225 | | 2020-04-12 | 212 | +------------+------+
Seperti yang Anda lihat pada tabel di atas, tidak ada data untuk banyak tanggal di antaranya seperti 2, 3 April, dll.
Jika kita mencoba untuk memplot data ini pada grafik, itu akan terlihat seperti
Grafik seperti itu bisa menyesatkan karena tidak menunjukkan celah kolom untuk tanggal yang hilang.
Bonus Baca:SQL Query untuk Membandingkan Penjualan Produk Berdasarkan Bulan
Untuk mengisi baris tanggal yang hilang di MySQL, kita perlu membuat tabel pembantu yang berisi semua tanggal yang diperlukan, tanpa celah urutan atau tanggal yang hilang, lalu menggabungkannya dengan penjualan kita. tabel.
Berikut cara membuat tabel pembantu kalender .
mysql> CREATE TABLE calendar (datefield DATE); mysql> insert into calendar(datefield) values('2020-04-01'), ('2020-04-02'), ('2020-04-03'), ('2020-04-04'), ('2020-04-05'), ('2020-04-06'), ('2020-04-07'), ('2020-04-08'), ('2020-04-09'), ('2020-04-10'), ('2020-04-11'), ('2020-04-12'), ('2020-04-13'), ('2020-04-14'), ('2020-04-15'), ('2020-04-16'), ('2020-04-17'), ('2020-04-18'), ('2020-04-19'), ('2020-04-20'), ('2020-04-21'), ('2020-04-22'), ('2020-04-23'), ('2020-04-24'), ('2020-04-25'), ('2020-04-26'), ('2020-04-27'), ('2020-04-28'), ('2020-04-29'), ('2020-04-30'); mysql> select * from calendar; +------------+ | datefield | +------------+ | 2020-04-01 | | 2020-04-02 | | 2020-04-03 | | 2020-04-04 | | 2020-04-05 | | 2020-04-06 | | 2020-04-07 | | 2020-04-08 | | 2020-04-09 | | 2020-04-10 | | 2020-04-11 | | 2020-04-12 | | 2020-04-13 | | 2020-04-14 | | 2020-04-15 | | 2020-04-16 | | 2020-04-17 | | 2020-04-18 | | 2020-04-19 | | 2020-04-20 | | 2020-04-21 | | 2020-04-22 | | 2020-04-23 | | 2020-04-24 | | 2020-04-25 | | 2020-04-26 | | 2020-04-27 | | 2020-04-28 | | 2020-04-29 | | 2020-04-30 | +------------+
Ada juga jalan yang lebih pendek untuk membuat tabel kalender, jika Anda nyaman menggunakan prosedur tersimpan.
mysql> DELIMITER | CREATE PROCEDURE fill_calendar(start_date DATE, end_date DATE) BEGIN DECLARE crt_date DATE; SET crt_date=start_date; WHILE crt_date <= end_date DO INSERT INTO calendar VALUES(crt_date); SET crt_date = ADDDATE(crt_date, INTERVAL 1 DAY); END WHILE; END | DELIMITER ;
Anda dapat memanggil fungsi ini menggunakan fungsi CALL. Untuk rentang tanggal dari 1 hingga 30 April,
mysql> CALL fill_calendar('2020-04-01', '2020-04-31');
Bonus Baca:Cara Menghitung Penjualan Per Bulan di MySQL
Akhirnya, kami melakukan gabungan KIRI kalender meja dengan penjualan untuk mengisi baris tanggal yang hilang di MySQL.
mysql> select datefield,sum(sale) from calendar left join sales on datefield=order_date group by datefield; +------------+-----------+ | datefield | sum(sale) | +------------+-----------+ | 2020-04-01 | 212 | | 2020-04-02 | NULL | | 2020-04-03 | NULL | | 2020-04-04 | 220 | | 2020-04-05 | 120 | | 2020-04-06 | NULL | | 2020-04-07 | 200 | | 2020-04-08 | 222 | | 2020-04-09 | NULL | | 2020-04-10 | 312 | | 2020-04-11 | 225 | | 2020-04-12 | 212 | | 2020-04-13 | NULL | | 2020-04-14 | NULL | | 2020-04-15 | NULL | | 2020-04-16 | NULL | | 2020-04-17 | NULL | | 2020-04-18 | NULL | | 2020-04-19 | NULL | | 2020-04-20 | NULL | | 2020-04-21 | NULL | | 2020-04-22 | NULL | | 2020-04-23 | NULL | | 2020-04-24 | NULL | | 2020-04-25 | NULL | | 2020-04-26 | NULL | | 2020-04-27 | NULL | | 2020-04-28 | NULL | | 2020-04-29 | NULL | | 2020-04-30 | NULL | +------------+-----------+
Seperti yang Anda lihat, tabel di atas berisi semua tanggal, dengan penjualan untuk baris yang berisi data dan NULL untuk baris tanggal yang hilang.
Jika Anda ingin mengganti NULL ini dengan 0, Anda dapat menggunakan fungsi IFNULL,
mysql> select datefield,IFNULL(sum(sale),0) from calendar left join sales on datefield=order_date group by datefield; +------------+---------------------+ | datefield | IFNULL(sum(sale),0) | +------------+---------------------+ | 2020-04-01 | 212 | | 2020-04-02 | 0 | | 2020-04-03 | 0 | | 2020-04-04 | 220 | | 2020-04-05 | 120 | | 2020-04-06 | 0 | | 2020-04-07 | 200 | | 2020-04-08 | 222 | | 2020-04-09 | 0 | | 2020-04-10 | 312 | | 2020-04-11 | 225 | | 2020-04-12 | 212 | | 2020-04-13 | 0 | | 2020-04-14 | 0 | | 2020-04-15 | 0 | | 2020-04-16 | 0 | | 2020-04-17 | 0 | | 2020-04-18 | 0 | | 2020-04-19 | 0 | | 2020-04-20 | 0 | | 2020-04-21 | 0 | | 2020-04-22 | 0 | | 2020-04-23 | 0 | | 2020-04-24 | 0 | | 2020-04-25 | 0 | | 2020-04-26 | 0 | | 2020-04-27 | 0 | | 2020-04-28 | 0 | | 2020-04-29 | 0 | | 2020-04-30 | 0 | +------------+---------------------+
Bonus Baca :Cara Membuat Dynamic Pivot Table di MySQL
Saat kami mengisi tanggal yang hilang di MySQL, kami juga akan mendapatkan data untuk tanggal yang akan datang. Jika Anda juga ingin menghapus 0 baris tambahan ini yang ada di kalender setelah tanggal_pesanan terakhir Anda dapat melakukannya dengan klausa WHERE
mysql> select datefield,IFNULL(sum(sale),0) from calendar left join sales on datefield=order_date where datefield between (SELECT MIN(DATE(order_date)) FROM sales) AND (SELECT MAX(DATE(order_date)) FROM sales) group by datefield; +------------+---------------------+ | datefield | IFNULL(sum(sale),0) | +------------+---------------------+ | 2020-04-01 | 212 | | 2020-04-02 | 0 | | 2020-04-03 | 0 | | 2020-04-04 | 220 | | 2020-04-05 | 120 | | 2020-04-06 | 0 | | 2020-04-07 | 200 | | 2020-04-08 | 222 | | 2020-04-09 | 0 | | 2020-04-10 | 312 | | 2020-04-11 | 225 | | 2020-04-12 | 212 | +------------+---------------------+
Setelah Anda mengisi tanggal yang hilang di MySQL, Anda dapat menggunakan alat pelaporan untuk memplot data ini pada diagram batang atau dasbor dan membagikannya dengan tim Anda. Berikut adalah contoh diagram batang yang menunjukkan penjualan harian, dibuat menggunakan Ubiq.
Lihat perbedaannya dalam 2 grafik!
Jika Anda ingin membuat grafik, dasbor &laporan dari database MySQL, Anda dapat mencoba Ubiq. Kami menawarkan uji coba gratis selama 14 hari.