Mange gange skal du rapportere data i en MySQL-tabel sammen med totaler. Der er 2 måder at tilføje total række i MySQL ved at bruge UNION ALL og ROLLUP. Sådan tilføjer du samlet række i MySQL.
Sådan tilføjer du Total Row i MySQL
Her er trinene til at tilføje total række i MySQL. Lad os sige, at du har følgende tabelsalg(ordre_dato, udsalg).
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 vil se på 2 måder at tilføje total række i MySQL – ved hjælp af UNION ALL og ROLLUP. ROLLUP-funktionen blev tilføjet til MySQL fra sandsynligvis version 5.0. Så dem, der arbejder med ældre versioner, skal bruge UNION ALL.
Brug af UNION ALL
I denne tilgang SUMMER vi dataene og tilføjer dem blot til vores oprindelige tabel ved hjælp af UNION ALL-sætning, som vist nedenfor
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 ovenstående forespørgsel tilføjes den samlede række, der vises som sidste række, til din oprindelige tabel ved hjælp af UNION ALL. Dette ændrer ikke den originale tabel, men kun det viste resultat. Mens du bruger UNION ALL, er det nødvendigt at bevare de samme kolonner i alle udvalgte forespørgsler, der bruges i den. Derfor har vi tildelt en tekst 'Total' som ordre_date kolonne. UNION ALL er en gammeldags måde at tilføje total i MySQL.
Bonus Læs:Sådan beregnes løbende total i MySQL
Brug af ROLLUP
Du kan også bruge GROUP BY med ROLLUP-klausul til direkte at samle værdier og automatisk tilføje total række i MySQL, som vist nedenfor
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 | +------------+------+
Brug af ROLLUP er kortere og hjælper dig også med at tilføje oversigtsrækker med totaler, men det tillader dig ikke at tilføje tilpasset tekst som 'Total' i din sidste række. Et andet problem er, at det automatisk samler data for flere niveauer, tilføjer subtotalrækker såvel som totaltotalrækker.
Her er et eksempel på at tilføje total række i MySQL ved hjælp af ROLLUP. Lad os sige, at du har følgende tabel
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æser: Sådan sammenkædes flere rækker i ét felt i MySQL
Uanset hvordan du angiver din GROUP BY-klausul, vil du uvægerligt ende med NULLs og subtotaler, når du tilføjer total række i MySQL, når du bruger 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ævnt før, er det en meget praktisk måde til hurtigt at beregne subtotaler og tilføje total række i MySQL.
Så hvis du vil tilpasse din samlede række, skal du gå med UNION ALL, da det giver dig mere kontrol. På den anden side, hvis du også vil beregne undertotaler, så gå med ROLLUP.
Det er det! Nu ved du, hvordan du tilføjer den samlede række i MySQL.
Du kan bruge et rapporteringsværktøj til at plotte disse data i en tabel og dele dem med dit team. Her er et eksempel på en tabel oprettet ved hjælp af Ubiq.
Hvis du vil oprette diagrammer, dashboards og rapporter fra MySQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.