Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak dodać całkowity wiersz w MySQL

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić błąd zapytania w PDO PHP

  2. Zrozumienie dziennika audytu ProxySQL

  3. Jak mogę zasymulować zmienną tablicową w MySQL?

  4. Zwracaj tylko wartości liczbowe w MySQL

  5. Czy nazwy tabel w MySQL rozróżniają wielkość liter?