Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Menggunakan MySQL Rollup

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!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan Kunci Asing ke tabel yang ada

  2. Bagaimana cara mengambil versi saat ini dari sistem manajemen basis data MySQL (DBMS)?

  3. Alternatif pt-query-digest - Manajemen &Pemantauan Kueri MySQL dengan ClusterControl

  4. Neo4j - Buat Node menggunakan Cypher

  5. Bagaimana cara mengonversi dari BLOB ke TEXT di MySQL?