sql >> Database teknologi >  >> RDS >> Mysql

Sådan tilføjes total række i MySQL

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.

  1. Simuleret OLAP

  2. Sådan oprettes og implementeres Azure Database til MySQL Server ved hjælp af Azure Portal og Workbench

  3. Sådan installeres Oracle SQL Developer 18.2 på Windows 10?

  4. Oracle RAC VIP og ARP Primer