Często może być konieczne obliczenie sumy bieżącej lub sumy skumulowanej dla określonej kolumny, takiej jak sprzedaż. Ponieważ w MySQL nie ma funkcji obliczania skumulowanej sumy, musisz to zrobić za pomocą zapytania SQL. Oto zapytanie SQL do obliczenia łącznej sumy w MySQL.
Jak obliczyć skumulowaną sumę w MySQL
Oto jak obliczyć skumulowaną sumę w MySQL. Załóżmy, że masz poniższą tabelę zawierającą dzienne dane o sprzedaży.
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 | +------------+------+
Załóżmy, że chcesz obliczyć skumulowaną sumę sprzedaży, w ten sposób
+------------+------+-----------------+ | 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 | +------------+------+-----------------+
Oto zapytanie SQL do obliczenia łącznej sumy w 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 | +------------+------+-----------------+
Przeczytaj bonus: Jak utworzyć tabelę przestawną w MySQL
W powyższym zapytaniu ustawiamy tymczasową zmienną csum na 0. Następnie dla każdego wiersza używamy jej do obliczenia i przechowywania sumy skumulowanej.
Należy pamiętać, że ta skumulowana suma nie jest przechowywana w żadnej kolumnie. Jest po prostu wyświetlany w wyniku.
Jeśli chcesz zachować tę wartość, musisz dodać nową kolumnę do swojej tabeli i użyć klauzuli UPDATE, jak pokazano poniżej.
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 | +------------+------+----------------+
Możesz dostosować zapytanie SQL, aby zawierało filtry za pomocą klauzuli WHERE lub JOINS, jak pokazano poniżej
mysql> set @csum := 0; mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale from sales where <condition> order by order_date;
Przeczytaj dodatkowe: Jak obliczyć medianę w MySQL
Ponieważ MySQL nie oferuje wbudowanej funkcji sumy skumulowanej, możesz użyć powyższego zapytania SQL, aby obliczyć łączną sumę w MySQL.
Po obliczeniu skumulowanej sumy w MySQL, możesz użyć narzędzia do tworzenia wykresów, aby łatwo wykreślić je jako wykres liniowy lub wykres słupkowy, jak pokazano poniżej. Oto przykład wykresu utworzonego za pomocą Ubiq.
Jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych MySQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.