sql >> Databáze >  >> RDS >> Mysql

Jak vypočítat celkový součet v MySQL

MySQL nemá funkci pro výpočet kumulativního součtu, známého také jako průběžný součet. Chcete-li vypočítat kumulativní součet v MySQL, musíte napsat dotaz SQL. Podívejme se tedy na dotaz SQL pro výpočet průběžného součtu v MySQL.

Jak vypočítat celkový součet v MySQL

Zde je návod, jak vypočítat celkový součet v MySQL. Řekněme, že máte následující tabulku, která obsahuje denní tržby.

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

Řekněme, že chcete vypočítat průběžný součet pro tuto tabulku, podobně.

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

Bonusové čtení: Jak zřetězit více řádků do jednoho pole v MySQL

Zde je dotaz SQL pro výpočet průběžného součtu v 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 |
+------------+------+-----------------+

Ve výše uvedeném dotazu jsme nejprve nastavili uživatelem definovanou proměnnou csum na 0. Tu používáme k uložení průběžného součtu každého řádku. Je důležité si uvědomit, že csum není uložen v žádné tabulce. Jednoduše se používá k zobrazení průběžných celkových hodnot.

Chcete-li uložit tento průběžný součet, můžete do tabulky přidat nový sloupec a pomocí klauzule UPDATE uložit průběžné celkové hodnoty.

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

Bonusové čtení: Jak přidat celkový řádek v MySQL

Dotaz SQL můžete také přizpůsobit pomocí klauzule WHERE nebo JOINS, jak je uvedeno

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


Vzhledem k tomu, že MySQL nenabízí žádnou vestavěnou funkci pro spuštění součtu, můžete použít výše uvedený dotaz SQL ke spuštění součtu v MySQL. Můžete také použít MONTH(datum_objednávky) namísto datum_objednávky výše, pokud chcete psát SQL pro kumulativní součet za měsíc.

Jakmile vypočítáte průběžný součet, můžete pomocí nástroje pro vytváření grafů vykreslit tato data do spojnicového grafu a sdílet je se svým týmem. Zde je příklad spojnicového grafu, který ukazuje průběžný součet, vytvořený pomocí Ubiq.

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. TransactSQL ke spuštění jiného skriptu TransactSQL

  2. Převést „čas“ na „smalldatetime“ v SQL Server (příklady T-SQL)

  3. T-SQL Přeskočit Převzít uloženou proceduru

  4. Chyby T-SQL, úskalí a doporučené postupy – poddotazy