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

Как да използвате MySQL Rollup

Понякога може да се наложи да изчислите общи и междинни суми в MySQL или да добавите общи редове към вашите данни. Може да е досадно да се агрегират данни с помощта на UNION израз, особено за изчисляване на междинни суми. MySQL Rollup е подходящ за такива случаи на употреба. Ето как да използвате MySQL Rollup за изчисляване на общата и междинната сума  в MySQL.

Как да използвам MySQL Rollup

Ето стъпките за изчисляване на общия и междинен сбор с помощта на MySQL Rollup.

MySQL Rollup ви позволява лесно да събирате данни и да изчислявате междинни суми с помощта на едно изявление. Можете също да го използвате, за да добавите общи редове и редове за междинна сума към вашите данни, вместо да ги изчислявате отделно и да комбинирате резултата с помощта на оператор UNION.

Ето синтаксиса на MySQL ROLLUP.

SELECT 
    column1, column2, column3, ...
FROM 
    table_name
GROUP BY
    column1, column2,... WITH ROLLUP;

Горната заявка е много подобна на агрегирането на данни чрез оператор GROUP BY, с изключение на това, че добавяте ключова дума WITH ROLLUP след клауза GROUP BY.

В горната заявка ние посочваме колоните, които трябва да покажем в резултата от нашата заявка в клауза SELECT. Трябва да споменем и името на таблицата. В клаузата GROUP BY указваме колоните, въз основа на които искаме да обобщим данните.

Бонус четене:Как да проверите версията на 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 |
+------------+------+

Бонус четене:Как да деактивирате проверката на чужд ключ в MySQL

Ето SQL заявката за MySQL Rollup за изчисляване на общите стойности и добавяне на общ ред към таблицата. Общата сума винаги се добавя като последен ред, като на колоната GROUP BY се присвоява стойност NULL.

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 |
+------------+------+

В заявката по-горе ние РЪПВАМЕ по order_date колона.

Бонус четене:Как да създадете последователност в MySQL

Ако посочите повече от една колона в клаузата GROUP BY, тогава MySQL ще приеме йерархия между тях и сборните данни съответно.

Например, ако споменете

GROUP BY c1, c2, c3 WITH ROLLUP

тогава MySQL ще приеме

c1 > c2 > c3

Затова е важно да внимавате с реда на колоните в клаузата GROUP BY, докато използвате 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

Ето SQL заявката за събиране на данни по колони продукт и дата_на поръчка. В този случай MySQL не само ще изчисли общата сума и ще покаже в края, но също ще изчисли междинните суми по колони за всяка колона, спомената в клаузата GROUP BY, с изключение на последната, тоест само продукт колона.

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 |
+---------+------------+-----------+

В горния резултат ще видите общите суми и общия сбор, подчертани като удебелен

Ето резултата, ако споменете order_date и след това колона продукт в клауза GROUP BY. В този случай MySQL ще изчисли общата сума и общата сума според датата на поръчка.

mysql> select product,order_date,sum(sale) 
       from sales group by order_date,product with rollup;	   

+---------+------------+-----------+
| product | order_date | sum(sale) |
+---------+------------+-----------+
| A       | 2020-01-01 |        20 |
| NULL    | 2020-01-01 |        20 |
| B       | 2020-01-02 |        25 |
| NULL    | 2020-01-02 |        25 |
| B       | 2020-01-03 |        15 |
| NULL    | 2020-01-03 |        15 |
| A       | 2020-01-04 |        30 |
| NULL    | 2020-01-04 |        30 |
| A       | 2020-01-05 |        20 |
| NULL    | 2020-01-05 |        20 |
| NULL    | NULL       |       110 |
+---------+------------+-----------+

Както можете да видите, резултатите са различни, ако промените реда на колоните, споменати в клаузата GROUP BY. Въпреки това MySQL ROLLUP е много удобен начин за бързо изчисляване на междинни суми и добавяне на общия ред в MySQL.

Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да нулирате паролата на администратор на WordPress чрез командния ред на MySQL

  2. Мигрирайте база данни от Postgres към MySQL

  3. Как да получите размерите на таблиците на MySQL база данни?

  4. Предоставяне на MySQL разрешения за таблица и колона

  5. Как да направя групово вмъкване в MySQL?