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

So fügen Sie die Gesamtzeile in MySQL hinzu

Häufig müssen Sie Daten zusammen mit Gesamtsummen in einer MySQL-Tabelle melden. Es gibt zwei Möglichkeiten, die Gesamtzeile in MySQL mit UNION ALL und ROLLUP hinzuzufügen. So fügen Sie eine Gesamtzeile in MySQL hinzu.

Wie man Gesamtzeilen in MySQL hinzufügt

Hier sind die Schritte zum Hinzufügen einer Gesamtzeile in MySQL. 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 |
+------------+------+

Wir werden uns 2 Möglichkeiten zum Hinzufügen von Gesamtzeilen in MySQL ansehen – mit UNION ALL und ROLLUP. Die ROLLUP-Funktion wurde wahrscheinlich ab Version 5.0 zu MySQL hinzugefügt. Wer also mit älteren Versionen arbeitet, muss UNION ALL verwenden.

UNION ALL verwenden

Bei diesem Ansatz summieren wir die Daten und hängen sie einfach an unsere ursprüngliche Tabelle an, indem wir die UNION ALL-Klausel verwenden, wie unten gezeigt

mysql> select * from sales
       UNION ALL
       select 'Total' order_date,sum(sale) 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 |
| Total      |  220 |
+------------+------+

In der obigen Abfrage wird die als letzte Zeile angezeigte Gesamtzeile mit UNION ALL an Ihre ursprüngliche Tabelle angehängt. Dadurch ändert sich nicht die ursprüngliche Tabelle, sondern nur das angezeigte Ergebnis. Bei der Verwendung von UNION ALL ist es erforderlich, in allen darin verwendeten Auswahlabfragen die gleichen Spalten beizubehalten. Deshalb haben wir als order_date einen Text „Total“ vergeben Säule. UNION ALL ist eine altmodische Art, Summen in MySQL zu addieren.

Bonuslektüre:So berechnen Sie die laufende Summe in MySQL

Mit ROLLUP

Sie können auch GROUP BY mit der ROLLUP-Klausel verwenden, um Werte direkt zu summieren und die Gesamtzeile in MySQL automatisch hinzuzufügen, wie unten gezeigt

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

Die Verwendung von ROLLUP ist kürzer und hilft Ihnen auch beim Hinzufügen von Zusammenfassungszeilen mit Summen, aber Sie können keinen benutzerdefinierten Text wie "Total" in Ihrer letzten Zeile hinzufügen. Ein weiteres Problem ist, dass es automatisch Daten für mehrere Ebenen zusammenfasst, Zwischensummenzeilen sowie Gesamtsummenzeilen hinzufügt..

Hier ist ein Beispiel zum Hinzufügen einer Gesamtzeile in MySQL mit ROLLUP. 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 in MySQL mehrere Zeilen zu einem Feld verkettet

Unabhängig davon, wie Sie Ihre GROUP BY-Klausel angeben, werden Sie ausnahmslos mit NULL-Werten und Zwischensummen enden, wenn Sie die Gesamtzeile in MySQL hinzufügen, wenn Sie ROLLUP verwenden.

GROUP BY product and order_date
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 |
+---------+------------+-----------+

GROUP BY only product
mysql> select product,order_date,sum(sale) from sales group by product with rollup;
+---------+------------+-----------+
| product | order_date | sum(sale) |
+---------+------------+-----------+
| A       | 2020-01-01 |        70 |
| B       | 2020-01-02 |        40 |
| NULL    | 2020-01-02 |       110 |
+---------+------------+-----------+

GROUP BY order_date
mysql> select product,order_date,sum(sale) from sales group by order_date with rollup;
+---------+------------+-----------+
| product | order_date | sum(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 |
| A       | NULL       |       110 |
+---------+------------+-----------+

Wie bereits erwähnt, ist dies jedoch eine sehr bequeme Möglichkeit, Zwischensummen schnell zu berechnen und die Gesamtzeile in MySQL hinzuzufügen.

Wenn Sie also Ihre gesamte Zeile anpassen möchten, wählen Sie UNION ALL, da Sie damit mehr Kontrolle haben. Wenn Sie andererseits auch Zwischensummen berechnen möchten, verwenden Sie ROLLUP.

Das ist es! Jetzt wissen Sie, wie man Gesamtzeilen in MySQL hinzufügt.

Sie können ein Reporting-Tool verwenden, um diese Daten in einer Tabelle darzustellen und mit Ihrem Team zu teilen. Hier ist ein Beispiel für eine mit Ubiq erstellte Tabelle.

Wenn Sie Diagramme, Dashboards und Berichte aus einer MySQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.