Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verwenden Sie MySQL-Rollup

Manchmal müssen Sie möglicherweise Summen und Zwischensummen in MySQL berechnen oder Summenzeilen zu Ihren Daten hinzufügen. Es kann mühsam sein, Daten mit der UNION-Anweisung zu aggregieren, insbesondere um Zwischensummen zu berechnen. MySQL Rollup eignet sich für solche Anwendungsfälle. So verwenden Sie MySQL Rollup, um Gesamt- und Zwischensummen in MySQL zu berechnen.

Verwendung von MySQL-Rollup

Hier sind die Schritte zur Berechnung von Gesamt- und Zwischensummen mit MySQL Rollup.

Mit MySQL Rollup können Sie Daten einfach zusammenfassen und Zwischensummen mit einer einzigen Anweisung berechnen. Sie können es auch verwenden, um Gesamtzeilen und Zwischensummenzeilen zu Ihren Daten hinzuzufügen, anstatt sie separat zu berechnen und das Ergebnis mit der UNION-Anweisung zu kombinieren.

Hier ist die Syntax von MySQL ROLLUP.

SELECT 
    column1, column2, column3, ...
FROM 
    table_name
GROUP BY
    column1, column2,... WITH ROLLUP;

Die obige Abfrage ist der Aggregation von Daten mit der GROUP BY-Anweisung sehr ähnlich, außer dass Sie das Schlüsselwort WITH ROLLUP nach der GROUP BY-Klausel hinzufügen.

In der obigen Abfrage geben wir die Spalten an, die wir in unserem Abfrageergebnis in der SELECT-Klausel anzeigen müssen. Wir müssen auch den Tabellennamen erwähnen. In der GROUP BY-Klausel geben wir die Spalten an, auf deren Grundlage wir Daten aggregieren möchten.

Bonuslektüre:So überprüfen Sie die MySQL-Version

Angenommen, Sie haben die folgende Tabelle sales(order_date, sale).

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 |
+------------+------+

Bonuslektüre:So deaktivieren Sie die Fremdschlüsselprüfung in MySQL

Hier ist die SQL-Abfrage für MySQL Rollup, um Gesamtwerte zu berechnen und der Tabelle eine Gesamtzeile hinzuzufügen. Die Gesamtsumme wird immer als letzte Zeile hinzugefügt, wobei der Spalte GROUP BY der Wert NULL zugewiesen wird.

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 |
+------------+------+

In der obigen Abfrage ROLLUP bis zum order_date Spalte.

Bonuslektüre:So erstellen Sie eine Sequenz in MySQL

Wenn Sie mehr als eine Spalte in der GROUP BY-Klausel angeben, geht MySQL von einer Hierarchie zwischen ihnen aus und rollup-Daten entsprechend zusammen.

Wenn Sie beispielsweise

erwähnen
GROUP BY c1, c2, c3 WITH ROLLUP

dann übernimmt MySQL

c1 > c2 > c3

Daher ist es wichtig, bei der Verwendung von MySQL Rollup auf die Reihenfolge der Spalten in der GROUP BY-Klausel zu achten. Angenommen, Sie haben die folgende Tabelle.

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 |
+---------+------------+------+

Bonuslektüre:Wie man zwei Tabellen in MySQL vergleicht

Hier ist die SQL-Abfrage zum Rollup von Daten nach Produkt- und Bestelldatum-Spalten. In diesem Fall berechnet MySQL nicht nur die Gesamtsumme und zeigt sie am Ende an, sondern berechnet auch spaltenweise Zwischensummen für jede Spalte, die in der GROUP BY-Klausel erwähnt wird, mit Ausnahme der letzten, also nur product Spalte.

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 |
+---------+------------+-----------+

Im obigen Ergebnis sehen Sie die produktbezogenen Summen und die Gesamtsumme fett hervorgehoben

Hier ist das Ergebnis, wenn Sie order_date und dann die Produktspalte in der GROUP BY-Klausel erwähnen. In diesem Fall berechnet MySQL die Gesamtsumme und die Gesamtsumme von order_date.

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 |
+---------+------------+-----------+

Wie Sie sehen können, sind die Ergebnisse unterschiedlich, wenn Sie die Reihenfolge der in der GROUP BY-Klausel erwähnten Spalten ändern. Nichtsdestotrotz ist MySQL ROLLUP eine sehr praktische Möglichkeit, Zwischensummen schnell zu berechnen und Gesamtzeilen in MySQL hinzuzufügen.

Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!