Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да добавя общ ред в MySQL

Много пъти трябва да отчитате данни в 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-дневен безплатен пробен период.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да създам изглед с параметър в MySQL?

  2. Как да изпълним две mysql заявки като една в PHP/MYSQL?

  3. Как да инсталирате MySQL с phpMyAdmin на Ubuntu 14.04

  4. Внедряване на релационни бази данни на MySQL в Ubuntu 12.04 (Precise Pangolin)

  5. mysqli::mysqli():(HY000/2002):Не мога да се свържа с локален MySQL сървър чрез сокет 'MySQL' (2)