Många gånger behöver du rapportera data i en MySQL-tabell, tillsammans med totaler. Det finns två sätt att lägga till total rad i MySQL, med UNION ALL och ROLLUP. Så här lägger du till total rad i MySQL.
Hur man lägger till total rad i MySQL
Här är stegen för att lägga till total rad i MySQL. Låt oss säga att du har följande tabellförsäljning(order_datum, rea).
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 | +------------+------+
Vi kommer att titta på två sätt att lägga till total rad i MySQL – med UNION ALL och ROLLUP. ROLLUP-funktionen lades till i MySQL från troligen version 5.0. Så de som arbetar med äldre versioner måste använda UNION ALL.
Använder UNION ALL
I detta tillvägagångssätt summerar vi data och lägger helt enkelt till den i vår ursprungliga tabell med hjälp av UNION ALL-satsen, som visas nedan
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 | +------------+------+
I ovanstående fråga läggs den totala raden som visas som sista raden till din ursprungliga tabell med UNION ALL. Detta ändrar inte den ursprungliga tabellen, utan bara det visade resultatet. När du använder UNION ALL är det nödvändigt att behålla samma kolumner i alla valda frågor som används i den. Det är därför vi har tilldelat texten "Totalt" som order_date kolumn. UNION ALL är ett gammaldags sätt att lägga till totalt i MySQL.
Bonus Läs:Hur man beräknar löpande totalsumma i MySQL
Använda ROLLUP
Du kan också använda GROUP BY med ROLLUP-satsen för att direkt summera värden och automatiskt lägga till total rad i MySQL, som visas nedan
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 | +------------+------+
Att använda ROLLUP är kortare och hjälper dig också att lägga till sammanfattningsrad med totaler, men det tillåter inte att du lägger till anpassad text som "Totalt" på din sista rad. Ett annat problem är att den automatiskt samlar upp data för flera nivåer, lägger till undersumma rader såväl som totala rader.
Här är ett exempel för att lägga till total rad i MySQL, med hjälp av ROLLUP. Låt oss säga att du har följande tabell
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 | +---------+------------+------+
Bonusläsning: Hur man sammanfogar flera rader i ett fält i MySQL
Oavsett hur du anger din GROUP BY-sats, kommer du alltid att få NULL och delsummor, när du lägger till total rad i MySQL, när du använder ROLLUP.
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 | +---------+------------+-----------+
Men som nämnts tidigare är det ett mycket bekvämt sätt att snabbt beräkna delsummor och lägga till total rad i MySQL.
Så om du vill anpassa din totala rad, gå med UNION ALL eftersom det ger dig mer kontroll. Å andra sidan, om du vill beräkna delsummor också, gå med ROLLUP.
Det är allt! Nu vet du hur du lägger till total rad i MySQL.
Du kan använda ett rapportverktyg för att plotta denna data i en tabell och dela den med ditt team. Här är ett exempel på en tabell skapad med Ubiq.
Om du vill skapa diagram, instrumentpaneler och rapporter från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.