Много пъти трябва да отчитате данни в MySQL таблица, заедно с общите суми. Има 2 начина да добавите общ ред в MySQL, като използвате UNION ALL и ROLLUP. Ето как да добавите общ ред в MySQL.
Как да добавя общ ред в MySQL
Ето стъпките за добавяне на общ ред в MySQL. Да приемем, че имате следната таблица sales (order_date, sale).
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 |
+------------+------+
Ще разгледаме 2 начина за добавяне на общ ред в MySQL – с помощта на UNION ALL и ROLLUP. Функцията ROLLUP беше добавена към MySQL от вероятно версия 5.0. Така че тези, които работят с по-стари версии, ще трябва да използват UNION ALL.
Използване на UNION ALL
При този подход ние сумираме данните и просто ги добавяме към нашата оригинална таблица, използвайки клауза UNION ALL, както е показано по-долу
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 |
+------------+------+
В горната заявка общият ред, показан като последен ред, се добавя към оригиналната ви таблица с помощта на UNION ALL. Това не променя оригиналната таблица, а само показания резултат. Докато използвате UNION ALL, е необходимо да поддържате едни и същи колони във всички избрани заявки, използвани в него. Ето защо присвоихме текст „Общо“ като дата_на_поръчка колона. UNION ALL е старомоден начин за добавяне на общо в MySQL.
Бонус за четене:Как да изчислим текущата обща сума в MySQL
Използване на ROLLUP
Можете също да използвате GROUP BY с клауза ROLLUP за директно общи стойности и автоматично добавяне на общ ред в MySQL, както е показано по-долу
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 | +------------+------+
Използването на ROLLUP е по-кратко и също така ви помага да добавите обобщен ред с общи суми, но не ви позволява да добавяте персонализиран текст като „Общо“ в последния си ред. Друг проблем е, че той автоматично ще събира данни за множество нива, ще добавя редове под общия сбор, както и ред с обща сума..
Ето пример за добавяне на общ ред в MySQL, като използвате ROLLUP. Да приемем, че имате следната таблица
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 |
+---------+------------+------+
Бонус за четене: Как да свържете множество редове в едно поле в MySQL
Без значение как посочите вашата клауза GROUP BY, вие неизменно ще се окажете с NULL и междинни суми, когато добавите общ ред в MySQL, когато използвате 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 |
+---------+------------+-----------+
Въпреки това, както споменахме по-горе, това е много удобен начин за бързо изчисляване на междинни суми и добавяне на общ ред в MySQL.
Така че, ако искате да персонализирате общия си ред, използвайте UNION ALL, тъй като това ви дава повече контрол. От друга страна, ако искате да изчислите и под сумите, използвайте ROLLUP.
Това е! Сега знаете как да добавите общ ред в MySQL.
Можете да използвате инструмент за отчитане, за да начертаете тези данни в таблица и да ги споделите с екипа си. Ето пример за таблица, създадена с Ubiq.

Ако искате да създавате диаграми, табла за управление и отчети от MySQL база данни, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.