Molte volte è necessario riportare i dati in una tabella MySQL, insieme ai totali. Esistono 2 modi per aggiungere una riga totale in MySQL, utilizzando UNION ALL e ROLLUP. Ecco come aggiungere una riga totale in MySQL.
Come aggiungere la riga totale in MySQL
Ecco i passaggi per aggiungere la riga totale in MySQL. Supponiamo che tu abbia la seguente tabella vendite (data_ordine, vendita).
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 | +------------+------+
Esamineremo 2 modi per aggiungere una riga totale in MySQL, utilizzando UNION ALL e ROLLUP. La funzione ROLLUP è stata aggiunta a MySQL probabilmente dalla versione 5.0. Quindi coloro che lavorano con versioni precedenti dovranno utilizzare UNION ALL.
Utilizzo di UNION ALL
In questo approccio, sommiamo i dati e li aggiungiamo semplicemente alla nostra tabella originale utilizzando la clausola UNION ALL, come mostrato di seguito
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 | +------------+------+
Nella query precedente, la riga totale visualizzata come ultima riga viene aggiunta alla tabella originale utilizzando UNION ALL. Questo non cambia la tabella originale, ma solo il risultato visualizzato. Durante l'utilizzo di UNION ALL, è necessario mantenere le stesse colonne in tutte le query selezionate in esso utilizzate. Ecco perché abbiamo assegnato un testo "Totale" come data_ordine colonna. UNION ALL è un modo vecchio stile per sommare il totale in MySQL.
Bonus Leggi:Come calcolare il totale parziale in MySQL
Utilizzo di ROLLUP
Puoi anche utilizzare GROUP BY con la clausola ROLLUP per sommare direttamente i valori e aggiungere automaticamente la riga totale in MySQL, come mostrato di seguito
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 | +------------+------+
L'uso di ROLLUP è più breve e ti aiuta anche ad aggiungere una riga di riepilogo con i totali, ma non ti consente di aggiungere testo personalizzato come "Totale" nell'ultima riga. Un altro problema è che eseguirà automaticamente il rollup dei dati per più livelli, aggiungerà righe di subtotali e righe di totale generale.
Ecco un esempio per aggiungere una riga totale in MySQL, usando ROLLUP. Supponiamo che tu abbia la seguente tabella
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 | +---------+------------+------+
Bonus Leggi: Come concatenare più righe in un campo in MySQL
Indipendentemente da come specifichi la tua clausola GROUP BY, finirai invariabilmente con NULL e subtotali, quando aggiungi la riga totale in MySQL, quando usi 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 | +---------+------------+-----------+
Tuttavia, come accennato in precedenza, è un modo molto conveniente per calcolare rapidamente i totali parziali e aggiungere una riga totale in MySQL.
Quindi, se vuoi personalizzare la tua riga totale, scegli UNION ALL perché ti dà più controllo. D'altra parte, se vuoi calcolare anche i subtotali, vai con ROLLUP.
Questo è tutto! Ora sai come aggiungere una riga totale in MySQL.
Puoi utilizzare uno strumento di reporting per tracciare questi dati in una tabella e condividerli con il tuo team. Ecco un esempio di una tabella creata con Ubiq.
Se vuoi creare grafici, dashboard e report dal database MySQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.