sql >> Databáze >  >> RDS >> Mysql

Jak přidat Total Row do MySQL

Mnohokrát potřebujete vykazovat data v tabulce MySQL spolu se součty. Existují 2 způsoby, jak přidat celkový řádek v MySQL, pomocí UNION ALL a ROLLUP. Zde je návod, jak přidat celkový řádek v MySQL.

Jak přidat celkový řádek v MySQL

Zde jsou kroky k přidání celkového řádku v MySQL. Řekněme, že máte následující tabulku 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 |
+------------+------+

Podíváme se na 2 způsoby, jak přidat celkový řádek v MySQL – pomocí UNION ALL a ROLLUP. Funkce ROLLUP byla do MySQL přidána pravděpodobně od verze 5.0. Takže ti, kteří pracují se staršími verzemi, budou muset použít UNION ALL.

Pomocí UNION ALL

V tomto přístupu data SUMUJEME a jednoduše je připojíme k naší původní tabulce pomocí klauzule UNION ALL, jak je uvedeno níže

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

Ve výše uvedeném dotazu je celkový řádek zobrazený jako poslední řádek připojen k vaší původní tabulce pomocí UNION ALL. Tím se nezmění původní tabulka, ale pouze zobrazený výsledek. Při používání UNION ALL je nutné udržovat stejné sloupce ve všech vybraných dotazech, které jsou v něm použity. Proto jsme jako objednací_datum přiřadili text „Celkem“. sloupec. UNION ALL je staromódní způsob, jak přidat součet v MySQL.

Bonusové čtení:Jak vypočítat průběžný součet v MySQL

Použití ROLLUP

Můžete také použít GROUP BY s klauzulí ROLLUP k přímému sčítání hodnot a automatickému přidávání celkového řádku v MySQL, jak je znázorněno níže

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

Použití ROLLUP je kratší a také vám pomůže přidat souhrnný řádek se součty, ale neumožňuje přidat vlastní text, jako je „Součet“, do posledního řádku. Dalším problémem je, že automaticky shrne data pro více úrovní, přidá řádky dílčího součtu i řádek celkového součtu.

Zde je příklad přidání celkového řádku v MySQL pomocí ROLLUP. Řekněme, že máte následující tabulku

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

Bonusové čtení: Jak zřetězit více řádků do jednoho pole v MySQL

Bez ohledu na to, jak zadáte klauzuli GROUP BY, vždy skončíte s hodnotami NULL a mezisoučty, když přidáte celkový řádek v MySQL, když používáte 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 |
+---------+------------+-----------+

Nicméně, jak již bylo zmíněno dříve, je to velmi pohodlný způsob, jak rychle vypočítat mezisoučty a přidat celkový řádek v MySQL.

Pokud si tedy chcete upravit celkový řádek, použijte UNION ALL, protože vám dává větší kontrolu. Na druhou stranu, pokud chcete vypočítat i dílčí součty, použijte ROLLUP.

A je to! Nyní víte, jak přidat celkový řádek v MySQL.

Pomocí nástroje pro vytváření sestav můžete tato data vykreslit do tabulky a sdílet je se svým týmem. Zde je příklad tabulky vytvořené pomocí Ubiq.

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. Jak UTC_DATE() funguje v MariaDB

  2. Jak používat GROUP BY ke zřetězení řetězců v SQL Server?

  3. Změňte funkci s hodnotou tabulky na serveru SQL Server

  4. Jak převést časové razítko s milisekundami na datum v Oracle