Database
 sql >> Base de Dados >  >> RDS >> Database

Consulta SQL para comparar vendas de produtos por mês


Muitas vezes, você precisará comparar as vendas de produtos por mês, lado a lado, para determinar como eles estão se saindo. Aqui está uma consulta SQL para comparar as vendas de produtos por mês, se seus dados estiverem armazenados em bancos de dados MySQL/PostgreSQL/SQL Server.


Consulta SQL para comparar vendas de produtos por mês


Digamos que você tenha uma tabela vendas(data_pedido, produto, venda) que contém as vendas diárias de todos os seus produtos.
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 |
| ...     | ...        |   ...|
+---------+------------+------+


Consulta SQL para comparar as vendas de produtos por mês


Na maioria dos casos, você terá linhas de vendas para todos os seus produtos, uma abaixo da outra, em linhas separadas, em vez de colunas separadas. Se você quiser comparar as vendas de produtos por mês, precisará dinamizar esses dados por produto coluna.

Aqui está a consulta para dinamizar sua tabela de vendas por produto coluna. Nós vamos olhar para ele em detalhes
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 |
+------------+------+-------+

Na consulta acima, usamos a função DATE_FORMAT para obter os nomes dos meses de order_date coluna. Além disso, usamos a instrução SE para criar uma tabela dinâmica por produto coluna. Nesse caso, para cada linha, a instrução IF verificará o valor da coluna do produto e adicionará o valor da venda a qualquer coluna rotulada como 'Caneta' ou 'Papel', dependendo do nome do produto. Também agrupamos por nome do mês, para obter vendas mensais de produtos, a partir de pedidos diários.

Depois de calcular as vendas mensais por produto, você pode usar uma ferramenta de gráficos para plotá-las em um gráfico de linhas, conforme mostrado abaixo. Veja um exemplo de gráfico de linhas criado usando o Ubiq.





Você sabia que pode criar tabelas dinâmicas no Ubiq usando apenas arrastar e soltar?

Se você deseja criar gráficos, painéis e relatórios do banco de dados MySQL/PostgreSQL/SQL Server, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.