Muitas vezes, você precisa relatar dados em uma tabela MySQL, juntamente com os totais. Existem 2 maneiras de adicionar linha total no MySQL, usando UNION ALL e ROLLUP. Veja como adicionar linha total no MySQL.
Como adicionar linha total no MySQL
Aqui estão as etapas para adicionar linha total no MySQL. Digamos que você tenha a seguinte tabela 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 | +------------+------+
Veremos 2 maneiras de adicionar linha total no MySQL – usando UNION ALL e ROLLUP. A função ROLLUP foi adicionada ao MySQL provavelmente a partir da versão 5.0. Portanto, aqueles que trabalham com versões mais antigas precisarão usar UNION ALL.
Usando UNION ALL
Nesta abordagem, somamos os dados e simplesmente os anexamos à nossa tabela original usando a cláusula UNION ALL, conforme mostrado abaixo
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 | +------------+------+
Na consulta acima, a linha total exibida como última linha é anexada à sua tabela original usando UNION ALL. Isso não altera a tabela original, mas apenas o resultado exibido. Ao usar UNION ALL, é necessário manter as mesmas colunas em todas as consultas selecionadas usadas nele. É por isso que atribuímos um texto 'Total' como order_date coluna. UNION ALL é uma maneira antiquada de adicionar total no MySQL.
Bônus de leitura:Como calcular o total de execução no MySQL
Usando ROLLUP
Você também pode usar GROUP BY com a cláusula ROLLUP para totalizar diretamente os valores e adicionar automaticamente a linha total no MySQL, conforme mostrado abaixo
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 | +------------+------+
Usar ROLLUP é mais curto e também ajuda a adicionar linhas de resumo com totais, mas não permite adicionar texto personalizado como 'Total' em sua última linha. Outro problema é que ele acumulará dados automaticamente para vários níveis, adicionará linhas de subtotal e linha de total geral.
Aqui está um exemplo para adicionar linha total no MySQL, usando ROLLUP. Digamos que você tenha a seguinte tabela
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 | +---------+------------+------+
Bônus de leitura: Como concatenar várias linhas em um campo no MySQL
Não importa como você especifique sua cláusula GROUP BY, você invariavelmente terminará com NULLs e subtotais, quando você adiciona a linha total no MySQL, quando você usa 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 | +---------+------------+-----------+
No entanto, como mencionado anteriormente, é uma maneira muito conveniente de calcular subtotais rapidamente e adicionar linha total no MySQL.
Portanto, se você deseja personalizar sua linha total, use UNION ALL, pois oferece mais controle. Por outro lado, se você quiser calcular os subtotais também, vá com ROLLUP.
É isso! Agora você sabe como adicionar linha total no MySQL.
Você pode usar uma ferramenta de relatório para plotar esses dados em uma tabela e compartilhá-los com sua equipe. Aqui está um exemplo de uma tabela criada usando Ubiq.
Se você deseja criar gráficos, painéis e relatórios do banco de dados MySQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.