Wiele razy musisz raportować dane w tabeli MySQL wraz z sumami. Istnieją dwa sposoby na dodanie sumy wierszy w MySQL, używając UNION ALL i ROLLUP. Oto jak dodać całkowity wiersz w MySQL.
Jak dodać sumę wierszy w MySQL
Oto kroki, aby dodać całkowity wiersz w MySQL. Załóżmy, że masz następującą tabelę sprzedaży (data_zamówienia, sprzedaż).
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 |
+------------+------+
Przyjrzymy się dwóm sposobom na dodanie sumy wierszy w MySQL – za pomocą UNION ALL i ROLLUP. Funkcja ROLLUP została dodana do MySQL prawdopodobnie od wersji 5.0. Dlatego osoby pracujące ze starszymi wersjami będą musiały użyć UNION ALL.
Korzystanie z UNION ALL
W tym podejściu sumujemy dane i po prostu dołączamy je do naszej oryginalnej tabeli za pomocą klauzuli UNION ALL, jak pokazano poniżej
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 |
+------------+------+
W powyższym zapytaniu całkowity wiersz wyświetlany jako ostatni wiersz jest dodawany do oryginalnej tabeli za pomocą UNION ALL. Nie zmienia to oryginalnej tabeli, a jedynie wyświetlany wynik. Podczas korzystania z UNION ALL konieczne jest zachowanie tych samych kolumn we wszystkich użytych w nim zapytaniach wybierających. Dlatego przypisaliśmy tekst „Łącznie” jako data_zamówienia kolumna. UNION ALL to staromodny sposób dodawania sumy w MySQL.
Przeczytaj bonus:Jak obliczyć sumę bieżącą w MySQL
Korzystanie z ROLLUP
Możesz również użyć GROUP BY z klauzulą ROLLUP, aby bezpośrednio sumować wartości i automatycznie dodawać sumę wierszy w MySQL, jak pokazano poniżej
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 | +------------+------+
Korzystanie z ROLLUP jest krótsze i pomaga również dodać wiersz podsumowania z sumami, ale nie pozwala na dodanie niestandardowego tekstu, takiego jak „Suma” w ostatnim wierszu. Innym problemem jest to, że automatycznie zbiera dane dla wielu poziomów, dodaje wiersze sum częściowych oraz wiersze sum całkowitych.
Oto przykład, jak dodać sumę wiersza w MySQL za pomocą ROLLUP. Załóżmy, że masz poniższą 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 |
+---------+------------+------+
Przeczytaj dodatkowe: Jak połączyć wiele wierszy w jedno pole w MySQL
Bez względu na to, jak określisz klauzulę GROUP BY, zawsze będziesz miał wartości NULL i sumy częściowe, gdy dodasz wiersz sumy w MySQL, gdy użyjesz 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 |
+---------+------------+-----------+
Jednak, jak wspomniano wcześniej, jest to bardzo wygodny sposób szybkiego obliczania sum częściowych i dodawania wiersza całkowitego w MySQL.
Jeśli więc chcesz dostosować swój całkowity wiersz, wybierz UNION ALL, ponieważ zapewnia to większą kontrolę. Z drugiej strony, jeśli chcesz obliczyć również sumy częściowe, wybierz ROLLUP.
Otóż to! Teraz wiesz, jak dodać całkowity wiersz w MySQL.
Możesz użyć narzędzia do raportowania, aby wykreślić te dane w tabeli i udostępnić je swojemu zespołowi. Oto przykład tabeli utworzonej 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.