Terkadang Anda mungkin perlu menghitung total dan subtotal di MySQL, atau menambahkan baris total ke data Anda. Mungkin membosankan untuk menggabungkan data menggunakan pernyataan UNION terutama untuk menghitung subtotal. MySQL Rollup cocok untuk kasus penggunaan seperti itu. Berikut cara menggunakan MySQL Rollup untuk menghitung total dan subtotal di MySQL.
Cara Menggunakan MySQL Rollup
Berikut langkah-langkah menghitung total dan subtotal menggunakan MySQL Rollup.
MySQL Rollup memungkinkan Anda dengan mudah menggulung data dan menghitung subtotal menggunakan satu pernyataan. Anda juga dapat menggunakannya untuk menambahkan baris total dan baris subtotal ke data Anda, daripada menghitungnya secara terpisah dan menggabungkan hasilnya menggunakan pernyataan UNION.
Berikut sintaks MySQL ROLLUP.
SELECT column1, column2, column3, ... FROM table_name GROUP BY column1, column2,... WITH ROLLUP;
Kueri di atas sangat mirip dengan menggabungkan data menggunakan pernyataan GROUP BY, kecuali bahwa Anda menambahkan kata kunci WITH ROLLUP setelah klausa GROUP BY.
Dalam kueri di atas, kami menentukan kolom yang perlu kami tampilkan dalam hasil kueri kami di klausa SELECT. Kita juga perlu menyebutkan nama tabel. Dalam klausa GROUP BY, kami menentukan kolom berdasarkan mana kami ingin menggabungkan data.
Bonus Baca :Cara Cek Versi MySQL
Katakanlah Anda memiliki tabel penjualan berikut (tanggal_pesanan, obral).
mysql> create table sales(order_date date,sale int); mysql> insert into sales values('2020-01-01',20), ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30), ('2020-02-05',20),('2020-02-10',20),('2020-02-06',25), ('2020-03-07',15),('2020-03-08',30),('2020-03-09',20); mysql> select * from sales; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-02-05 | 20 | | 2020-02-10 | 20 | | 2020-02-06 | 25 | | 2020-03-07 | 15 | | 2020-03-08 | 30 | | 2020-03-09 | 20 | +------------+------+
Bonus Baca :Cara Menonaktifkan Pemeriksaan Kunci Asing di MySQL
Inilah kueri SQL untuk MySQL Rollup untuk menghitung nilai total dan menambahkan baris total ke tabel. Total keseluruhan selalu ditambahkan sebagai baris terakhir, dengan kolom GROUP BY diberi nilai NULL.
mysql> select * from sales group by order_date with rollup; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-02-05 | 20 | | 2020-02-06 | 25 | | 2020-02-10 | 20 | | 2020-03-07 | 15 | | 2020-03-08 | 30 | | 2020-03-09 | 20 | | NULL | 20 | +------------+------+
Dalam kueri di atas kami ROLLUP berdasarkan order_date kolom.
Bonus Baca :Cara Membuat Urutan di MySQL
Jika Anda menentukan lebih dari satu kolom dalam klausa GROUP BY, maka MySQL akan mengasumsikan hierarki di antara kolom tersebut dan menggulung data yang sesuai.
Misalnya, jika Anda menyebutkan
GROUP BY c1, c2, c3 WITH ROLLUP
maka MySQL akan menganggap
c1 > c2 > c3
Jadi, penting untuk berhati-hati dengan urutan kolom dalam klausa GROUP BY, saat menggunakan MySQL Rollup. Katakanlah Anda memiliki tabel berikut.
mysql> create table sales(product varchar(255),order_date date,sale int); mysql> insert into sales values('A','2020-01-01',20),('B','2020-01-02',25), ('B','2020-01-03',15),('A','2020-01-04',30),('A','2020-01-05',20); mysql> select * from sales; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
Bonus Baca :Cara Membandingkan Dua Tabel di MySQL
Berikut kueri SQL untuk menggulung data menurut kolom produk dan tanggal_pesanan. Dalam hal ini, MySQL tidak hanya akan menghitung grand total dan tampilan di akhir tetapi juga menghitung subtotal kolom-bijaksana untuk setiap kolom yang disebutkan dalam klausa GROUP BY kecuali yang terakhir, yaitu, hanya produk kolom.
mysql> select product,order_date,sum(sale) from sales group by product,order_date with rollup; +---------+------------+-----------+ | product | order_date | sum(sale) | +---------+------------+-----------+ | A | 2020-01-01 | 20 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | | A | NULL | 70 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | B | NULL | 40 | | NULL | NULL | 110 | +---------+------------+-----------+
Pada hasil di atas, Anda akan melihat total produk dan total keseluruhan disorot sebagai tebal
Inilah hasilnya jika Anda menyebutkan order_date dan kemudian kolom produk di klausa GROUP BY. Dalam hal ini, MySQL akan menghitung total order_date-wise dan grand total.
mysql> select product,order_date,sum(sale) from sales group by order_date,product with rollup; +---------+------------+-----------+ | product | order_date | sum(sale) | +---------+------------+-----------+ | A | 2020-01-01 | 20 | | NULL | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | NULL | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | NULL | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | NULL | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | | NULL | 2020-01-05 | 20 | | NULL | NULL | 110 | +---------+------------+-----------+
Seperti yang Anda lihat, hasilnya berbeda jika Anda mengubah urutan kolom yang disebutkan dalam klausa GROUP BY. Namun demikian, MySQL ROLLUP adalah cara yang sangat nyaman untuk menghitung subtotal dengan cepat, dan menambahkan baris total di MySQL.
Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari ini!