Menghitung Jumlah Kumulatif dan Rerata Berjalan – MySQL Dasar #80

Dimislakan Anda memiliki sehimpunan data observasi yang diukut terhadap waktu dan ingin menghitung jumlah kumulatif dan observasi pada tiap titik perhitungan atau misalnya Anda ingin menghitung rata – rata berjalan pada tiap titik. 

Lihat daftar isi : Menggunakan Multi Tabel - MySQL Dasar #72 

Selanjutnya dimisalkan disini kita memiliki sebuah tabel yang akan menunjukan suatu himpunan pengukuran curah hujan yang diambil pada beberapa hari berturut – turut. Nilai – nilai pada tiap baris menunjukan tanggal observasi dan curah hujam dalam cm.
MariaDB [root93]> CREATE TABLE curahhujan
    -> (
    -> tanggal DATE,
    -> curah INT);
Query OK, 0 rows affected (0.488 sec)

MariaDB [root93]> INSERT INTO curahhujan (tanggal,curah)
    -> VALUES ('2022-06-01',3), ('2022-06-02',1),
    -> ('2022-06-03',4), ('2022-06-04',2),('1013-06-05',1);
Query OK, 5 rows affected (0.064 sec)
Records: 5  Duplicates: 0  Warnings: 0

MariaDB [root93]> SELECT * FROM curahhujan;
+------------+-------+
| tanggal    | curah |
+------------+-------+
| 2022-06-01 |     3 |
| 2022-06-02 |     1 |
| 2022-06-03 |     4 |
| 2022-06-04 |     2 |
| 1013-06-05 |     1 |
+------------+-------+
5 rows in set (0.001 sec)
Untuk menghitung curah hujan pada hari tertentu, kita perlu menjumlahkan nilai – nilai curah hujan untuk semua hari sebelumnya. Sebagai contoh, curah hujan kumulatif untuk 2023-06-03 ditentukan seperti berikut :

MariaDB [root93]> SELECT SUM(curah)
    -> FROM curahhujan
    -> WHERE tanggal <= '2022-06-03-';
+------------+
| SUM(curah) |
+------------+
|          8 |
+------------+

Selanjutnya jika misalanya angka – angka kumulatif untuk semua hari ditampilkan, maka kita dapat menuliskannya seperti berikut :
MariaDB [root93]> SELECT t1.tanggal, t1.curah AS 'curah hujan perhari',
    -> SUM(t2.curah) AS 'curah hujan kumulatif'
    -> FROM curahhujan AS t1, curahhujan AS t2
    -> WHERE t1.tanggal >= t2.tanggal
    -> GROUP by t1.tanggal;
+------------+---------------------+-----------------------+
| tanggal    | curah hujan perhari | curah hujan kumulatif |
+------------+---------------------+-----------------------+
| 2022-06-01 |                   3 |                     3 |
| 2022-06-02 |                   1 |                     4 |
| 2022-06-03 |                   4 |                     8 |
| 2022-06-04 |                   2 |                    10 |
| 2022-06-05 |                   1 |                    11 |
+------------+---------------------+-----------------------+
5 rows in set (0.001 sec)
Selnjutnya kita juga bisa memperluas hasil query dengan menampilkan jumlah hari pada setiap tanggal beserta nilai rata – rata berjalan untuk tiap curah hujan.
MariaDB [root93]> SELECT t1.tanggal, t1.curah AS 'curah hujan perhari',
    -> SUM(t2.curah) AS 'curah hujan kumulatif',
    -> COUNT(t2.curah) AS hari,
    -> AVG(t2.curah) AS 'curah hujan rat - rata'
    -> FROM curahhujan AS t1, curahhujan AS t2
    -> WHERE t1.tanggal >= t2.tanggal
    -> GROUP BY t1.tanggal;
+------------+---------------------+-----------------------+------+------------------------+
| tanggal    | curah hujan perhari | curah hujan kumulatif | hari | curah hujan rat - rata |
+------------+---------------------+-----------------------+------+------------------------+
| 2022-06-01 |                   3 |                     3 |    1 |                 3.0000 |
| 2022-06-02 |                   1 |                     4 |    2 |                 2.0000 |
| 2022-06-03 |                   4 |                     8 |    3 |                 2.6667 |
| 2022-06-04 |                   2 |                    10 |    4 |                 2.5000 |
| 2022-06-05 |                   1 |                    11 |    5 |                 2.2000 |
+------------+---------------------+-----------------------+------+------------------------+
5 rows in set (0.001 sec)
Pada konteks menghitung curah hujan diatas, jumlah rentang harti beserta nilai rata – rata dapat dihitung dengan mudah menggunakan fungsu agregat seperti COUNT() dan AVG() dikarenakan memang tidak ada hari yang kosong (terlompat) pada tabel. Tetapi lain halnya ketika misal terdapat hari yang terlompati maka ini bisa menjadi lebih kompleks, karena jumlah rentang hari untuk tiap kalkulasi tidak lagi sama dengan jumlah rekaman. Untuk dapat memastikan hal ini maka kita perlu menghapus rekaman yang memiliki curah hujan 1
MariaDB [root93]> SELECT tanggal, curah FROM curahhujan ORDER by tanggal;
+------------+-------+
| tanggal    | curah |
+------------+-------+
| 2022-06-01 |     3 |
| 2022-06-03 |     4 |
| 2022-06-04 |     2 |
+------------+-------+
3 rows in set (0.001 sec)
Perhatikan hasil qeury berikut :
MariaDB [root93]> SELECT t1.tanggal, t1.curah AS 'curah hujan perhari',
    -> SUM(t2.curah) AS 'curah hujan kumulatif',
    -> COUNT(t2.curah) AS hari,
    -> AVG(t2.curah) AS 'nilai rata - rata'
    -> FROM curahhujan AS t1, curahhujan AS t2
    -> WHERE t1.tanggal >= t2.tanggal
    -> GROUP by t1.tanggal;
+------------+---------------------+-----------------------+------+-------------------+
| tanggal    | curah hujan perhari | curah hujan kumulatif | hari | nilai rata - rata |
+------------+---------------------+-----------------------+------+-------------------+
| 2022-06-01 |                   3 |                     3 |    1 |            3.0000 |
| 2022-06-03 |                   4 |                     7 |    2 |            3.5000 |
| 2022-06-04 |                   2 |                     9 |    3 |            3.0000 |
+------------+---------------------+-----------------------+------+-------------------+
3 rows in set (0.001 sec)

MariaDB [root93]> 
Perhatikan bahwa hasil query diatas menunjukan hasil yang kurang terpat karena rentang hari yang salah, sehingga untuk memperbaiki hasilnya, kita bisa menulis query seperti berikut :
MariaDB [root93]> SELECT t1.tanggal, t1.curah AS 'curah hujan perhari',
    -> SUM(t2.curah) AS 'curah hujan kumulatif',
    -> TO_DAYS(MAX(t2.tanggal)) - TO_DAYS(MIN(t2.tanggal)) +1 AS hari,
    -> SUM(t2.tanggal) / (TO_DAYS(MAX(t2.tanggal)) - TO_DAYS(MIN(t2.tanggal))+1) 
    -> AS 'curah hujan rata - rata'
    -> FROM curahhujan AS t1, curahhujan AS t2
    -> WHERE t1.tanggal >= t2.tanggal
    -> GROUP by t1.tanggal;
+------------+---------------------+-----------------------+------+-------------------------+
| tanggal    | curah hujan perhari | curah hujan kumulatif | hari | curah hujan rata - rata |
+------------+---------------------+-----------------------+------+-------------------------+
| 2022-06-01 |                   3 |                     3 |    1 |           20220601.0000 |
| 2022-06-03 |                   4 |                     7 |    3 |           13480401.3333 |
| 2022-06-04 |                   2 |                     9 |    4 |           15165452.0000 |
+------------+---------------------+-----------------------+------+-------------------------+
3 rows in set (0.001 sec)

0 Response to "Menghitung Jumlah Kumulatif dan Rerata Berjalan – MySQL Dasar #80"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin