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

Sådan beregnes løbende total i MySQL

MySQL har ikke en funktion til at beregne kumulativ total, også kendt som løbende total. Du skal skrive en SQL-forespørgsel for at beregne kumulativ sum i MySQL. Så lad os se på en SQL-forespørgsel for at beregne løbende total i MySQL.

Sådan beregnes løbende total i MySQL

Sådan beregner du løbende total i MySQL. Lad os sige, at du har følgende tabel, der indeholder daglige salg.

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-01-05',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-01-05 |   20 |
+------------+------+

Lad os sige, at du gerne vil beregne løbende total for denne tabel.

+------------+------+-----------------+
| order_date | sale | cumulative_sale |
+------------+------+-----------------+
| 2020-01-01 |   20 |              20 |
| 2020-01-02 |   25 |              45 |
| 2020-01-03 |   15 |              60 |
| 2020-01-04 |   30 |              90 |
| 2020-01-05 |   20 |             110 |
+------------+------+-----------------+

Bonuslæser: Sådan sammenkædes flere rækker i ét felt i MySQL

Her er SQL-forespørgslen til at beregne løbende total i MySQL.

mysql> set @csum := 0;
mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
       from sales
       order by order_date;
+------------+------+-----------------+
| order_date | sale | cumulative_sale |
+------------+------+-----------------+
| 2020-01-01 |   20 |              20 |
| 2020-01-02 |   25 |              45 |
| 2020-01-03 |   15 |              60 |
| 2020-01-04 |   30 |              90 |
| 2020-01-05 |   20 |             110 |
+------------+------+-----------------+

I ovenstående forespørgsel sætter vi først en brugerdefineret variabel csum til 0. Vi bruger den til at gemme hver rækkes løbende total. Det er vigtigt at bemærke, at csum ikke er gemt i nogen tabel. Det bruges simpelthen til at vise de løbende samlede værdier.

Hvis du vil gemme denne løbende total, kan du tilføje en ny kolonne til din tabel og bruge UPDATE-sætningen til at gemme løbende totalværdier.

mysql> alter table sales add column cumulative_sum int;

mysql> set @csum := 0;

mysql> update sales
       set cumulative_sum = (@csum := @csum + sale)
       order by order_date;

mysql> select order_date,sale,cumulative_sum from sales;
+------------+------+----------------+
| order_date | sale | cumulative_sum |
+------------+------+----------------+
| 2020-01-01 |   20 |             20 |
| 2020-01-02 |   25 |             45 |
| 2020-01-03 |   15 |             60 |
| 2020-01-04 |   30 |             90 |
| 2020-01-05 |   20 |            110 |
+------------+------+----------------+

Bonuslæser: Sådan tilføjer du total række i MySQL

Du kan også tilpasse din SQL-forespørgsel ved hjælp af WHERE-sætning eller JOINS, som vist,

mysql> set @csum := 0;
mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
       from sales where <condition>
       order by order_date;


Da MySQL ikke tilbyder nogen indbygget funktion til at køre total, kan du bruge ovenstående SQL-forespørgsel til at køre total i MySQL. Du kan også bruge MONTH(order_date) i stedet for ordre_date ovenfor, hvis du vil skrive SQL for kumulativ sum pr. måned.

Når du har beregnet den løbende total, kan du bruge et diagramværktøj til at plotte disse data i et linjediagram og dele dem med dit team. Her er et eksempel på et linjediagram, der viser løbende total, 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. Sådan rettes ORA-12505, TNS:listener kender i øjeblikket ikke til SID givet i forbindelsesbeskrivelsen

  2. Sådan opretter du fjernforbindelse til Oracle 11g-databasen

  3. SQL SELECT for begyndere

  4. SQL SELECT for at få de første N positive heltal