sql >> Database >  >> RDS >> Mysql

Totale rij toevoegen in MySQL

Vaak moet u gegevens in een MySQL-tabel rapporteren, samen met totalen. Er zijn 2 manieren om een ​​totale rij toe te voegen in MySQL, met UNION ALL en ROLLUP. Hier leest u hoe u de totale rij in MySQL kunt toevoegen.

Hoe voeg je een totale rij toe in MySQL

Hier zijn de stappen om de totale rij toe te voegen in MySQL. Stel dat u de volgende tabelverkoop heeft (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 |
+------------+------+

We zullen kijken naar 2 manieren om de totale rij in MySQL toe te voegen - met UNION ALL en ROLLUP. De ROLLUP-functie is vanaf waarschijnlijk versie 5.0 aan MySQL toegevoegd. Dus degenen die met oudere versies werken, moeten UNION ALL gebruiken.

UNION ALL gebruiken

Bij deze benadering SUMmen we de gegevens en voegen deze eenvoudig toe aan onze oorspronkelijke tabel met behulp van de UNION ALL-clausule, zoals hieronder weergegeven

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 de bovenstaande query wordt de totale rij die als laatste rij wordt weergegeven, toegevoegd aan uw oorspronkelijke tabel met UNION ALL. Dit verandert de originele tabel niet, maar alleen het weergegeven resultaat. Bij het gebruik van UNION ALL is het noodzakelijk om dezelfde kolommen te behouden in alle selectiequery's die erin worden gebruikt. Daarom hebben we een tekst 'Totaal' toegewezen als order_date kolom. UNION ALL is een ouderwetse manier om totaal op te tellen in MySQL.

Bonus lezen:hoe u het lopende totaal in MySQL berekent

ROLLUP gebruiken

U kunt ook GROUP BY met de ROLLUP-clausule gebruiken om de totale waarden direct toe te voegen en automatisch de totale rij toe te voegen in MySQL, zoals hieronder weergegeven

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

Het gebruik van ROLLUP is korter en helpt u ook een samenvattingsrij met totalen toe te voegen, maar u kunt geen aangepaste tekst zoals 'Totaal' in uw laatste rij toevoegen. Een ander probleem is dat het automatisch gegevens voor meerdere niveaus samenvoegt, subtotaalrijen en eindtotaalrijen toevoegt.

Hier is een voorbeeld om de totale rij in MySQL toe te voegen met ROLLUP. Stel dat u de volgende tabel heeft

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 lezen: Hoe u meerdere rijen samenvoegt in één veld in MySQL

Het maakt niet uit hoe je je GROUP BY-clausule specificeert, je zult altijd eindigen met NULL's en subtotalen, wanneer je de totale rij toevoegt in MySQL, wanneer je ROLLUP gebruikt.

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

Zoals eerder vermeld, is het echter een erg handige manier om snel subtotalen te berekenen en de totale rij in MySQL toe te voegen.

Dus als je je totale rij wilt aanpassen, kies dan voor UNION ALL, want dat geeft je meer controle. Aan de andere kant, als je ook subtotalen wilt berekenen, ga dan met ROLLUP.

Dat is het! Nu weet je hoe je de totale rij in MySQL kunt toevoegen.

U kunt een rapportagetool gebruiken om deze gegevens in een tabel te plotten en met uw team te delen. Hier is een voorbeeld van een tabel gemaakt met Ubiq.

Als u grafieken, dashboards en rapporten wilt maken vanuit de MySQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen.

  1. Failover en failback op Amazon RDS

  2. SQL Server-blokkeringsquery

  3. Meerdere rangen in één tabel

  4. MySql krijgt records of gegevens per dag, week, maand en jaar