Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment ajouter une ligne totale dans MySQL

Souvent, vous devez rapporter des données dans une table MySQL, ainsi que des totaux. Il existe 2 façons d'ajouter une ligne totale dans MySQL, en utilisant UNION ALL et ROLLUP. Voici comment ajouter une ligne totale dans MySQL.

Comment ajouter une ligne totale dans MySQL

Voici les étapes pour ajouter une ligne totale dans MySQL. Supposons que vous ayez la table suivante 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 |
+------------+------+

Nous examinerons 2 façons d'ajouter une ligne totale dans MySQL - en utilisant UNION ALL et ROLLUP. La fonction ROLLUP a été ajoutée à MySQL à partir probablement de la version 5.0. Ainsi, ceux qui travaillent avec des versions plus anciennes devront utiliser UNION ALL.

Utiliser UNION TOUS

Dans cette approche, nous additionnons les données et les ajoutons simplement à notre table d'origine à l'aide de la clause UNION ALL, comme indiqué ci-dessous

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

Dans la requête ci-dessus, la ligne totale affichée en tant que dernière ligne est ajoutée à votre table d'origine à l'aide de UNION ALL. Cela ne modifie pas le tableau d'origine, mais uniquement le résultat affiché. Lors de l'utilisation de UNION ALL, il est nécessaire de conserver les mêmes colonnes dans toutes les requêtes de sélection utilisées. C'est pourquoi, nous avons attribué un texte "Total" comme order_date colonne. UNION ALL est une méthode à l'ancienne pour ajouter un total dans MySQL.

Lecture bonus :comment calculer le total cumulé dans MySQL

Utiliser ROLLUP

Vous pouvez également utiliser GROUP BY avec la clause ROLLUP pour totaliser directement les valeurs et ajouter automatiquement la ligne totale dans MySQL, comme indiqué ci-dessous

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'utilisation de ROLLUP est plus courte et vous aide également à ajouter une ligne récapitulative avec des totaux, mais elle ne vous permet pas d'ajouter du texte personnalisé comme "Total" dans votre dernière ligne. Un autre problème est qu'il cumulera automatiquement les données pour plusieurs niveaux, ajoutera des lignes de sous-total ainsi qu'une ligne de total général.

Voici un exemple pour ajouter une ligne totale dans MySQL, en utilisant ROLLUP. Disons que vous avez le tableau suivant

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

Lecture bonus : Comment concaténer plusieurs lignes dans un seul champ dans MySQL

Quelle que soit la façon dont vous spécifiez votre clause GROUP BY, vous vous retrouverez invariablement avec des valeurs NULL et des sous-totaux, lorsque vous ajoutez une ligne de total dans MySQL, lorsque vous utilisez 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 |
+---------+------------+-----------+

Cependant, comme mentionné précédemment, c'est un moyen très pratique de calculer rapidement des sous-totaux et d'ajouter une ligne de total dans MySQL.

Donc, si vous souhaitez personnaliser votre ligne totale, optez pour UNION ALL car cela vous donne plus de contrôle. D'autre part, si vous souhaitez également calculer des sous-totaux, utilisez ROLLUP.

C'est ça! Vous savez maintenant comment ajouter une ligne totale dans MySQL.

Vous pouvez utiliser un outil de création de rapports pour tracer ces données dans un tableau et les partager avec votre équipe. Voici un exemple de tableau créé avec Ubiq.

Si vous souhaitez créer des graphiques, des tableaux de bord et des rapports à partir de la base de données MySQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.