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.