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

Requête SQL pour comparer les ventes de produits par mois

Souvent, vous devrez comparer les ventes de produits par mois, côte à côte, pour déterminer comment elles se portent. Voici une requête SQL pour comparer les ventes de produits par mois, si vos données sont stockées dans des bases de données MySQL/PostgreSQL/SQL Server.

Requête SQL pour comparer les ventes de produits par mois

Disons que vous avez une table sales(order_date, product, sale) qui contient les ventes quotidiennes de tous vos produits.

mysql> create table sales(product varchar(255),order_date date,sale int);

mysql> insert into sales values('Pen','2020-01-01',20),('Paper','2020-01-02',25),
('Paper','2020-01-03',15),('Pen','2020-01-04',30),('Paper','2020-01-05',20)
...;

mysql> select * from sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| Pen     | 2020-01-01 |   20 |
| Paper   | 2020-01-02 |   25 |
| Paper   | 2020-01-03 |   15 |
| Pen     | 2020-01-04 |   30 |
| Pen     | 2020-01-05 |   20 |
| ...     | ...        |   ...|
+---------+------------+------+

Requête SQL pour comparer les ventes de produits par mois

Dans la plupart des cas, vous aurez des lignes de vente pour tous vos produits les unes en dessous des autres, dans des lignes séparées, au lieu de colonnes séparées. Si vous souhaitez comparer les ventes de produits par mois, vous devez faire pivoter ces données par produit colonne.

Voici la requête pour faire pivoter votre tableau des ventes par produit colonne. Nous allons le regarder en détail

mysql> SELECT date_format(order_date,'%b-%y') as order_date,
       sum(IF(product='Pen', sale, NULL)) AS Pen,
       sum(IF(product='Paper', sale, NULL)) AS Paper
       FROM sales
       GROUP BY year(order_date),month(order_date),date_format(order_date,'%b-%y')
       ;
+------------+------+-------+
| order_date | Pen  | Paper |
+------------+------+-------+
| Jan-20     |  200 |   320 |
| Feb-20     |  250 |   220 |
| Mar-20     |  230 |   290 |
| Apr-20     |  190 |   210 |
| May-20     |  210 |   230 |
| Jun-20     |  320 |   120 |
| Jul-20     |  330 |   220 |
| Aug-20     |  210 |   260 |
| Sep-20     |  120 |   220 |
| Oct-20     |  280 |   120 |
| Nov-20     |  290 |   280 |
| Dec-20     |  200 |   320 |
+------------+------+-------+

Dans la requête ci-dessus, nous utilisons la fonction DATE_FORMAT pour obtenir les noms de mois à partir de order_date colonne. De plus, nous utilisons l'instruction IF pour créer un tableau croisé dynamique par produit colonne. Dans ce cas, pour chaque ligne, l'instruction IF vérifiera la valeur de la colonne de produit et ajoutera la valeur de vente à l'une ou l'autre des colonnes intitulées "Stylo" ou "Papier" en fonction du nom du produit. Nous regroupons également par nom de mois, pour obtenir les ventes mensuelles de produits, à partir des commandes quotidiennes.

Après avoir calculé les ventes mensuelles par produit, vous pouvez utiliser un outil graphique pour les tracer sur un graphique linéaire, comme indiqué ci-dessous. Voici un exemple de graphique linéaire créé à l'aide d'Ubiq.

Saviez-vous que vous pouvez créer des tableaux croisés dynamiques dans Ubiq par simple glisser-déposer ?

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