sql >> Databasteknik >  >> RDS >> Database

SQL-fråga för att jämföra produktförsäljning per månad

Många gånger måste du jämföra produktförsäljningen per månad, sida vid sida, för att avgöra hur det går. Här är en SQL-fråga för att jämföra produktförsäljning per månad, om din data lagras i MySQL/PostgreSQL/SQL Server-databaser.

SQL-fråga för att jämföra produktförsäljning per månad

Låt oss säga att du har en tabell försäljning(orderdatum, produkt, rea) som innehåller daglig försäljning av alla dina produkter.

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

SQL-fråga för att jämföra produktförsäljning per månad

I de flesta fall kommer du att ha försäljningsrader för alla dina produkter under varandra, i separata rader, istället för separata kolumner. Om du vill jämföra produktförsäljning per månad måste du pivotera denna data efter produkt kolumn.

Här är frågan för att pivotera din försäljningstabell efter produkt kolumn. Vi kommer att titta på det i detalj

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

I ovanstående fråga använder vi DATE_FORMAT-funktionen för att få månadsnamn från order_date kolumn. Vidare använder vi IF-satsen för att skapa pivottabeller efter produkt kolumn. I det här fallet, för varje rad, kommer IF-uttrycket att kontrollera produktkolumnens värde och lägga till försäljningsvärdet till endera kolumnen märkt "Penna" eller "Papper" beroende på produktnamnet. Vi GRUPPERAR även EFTER månadsnamn för att få månatlig produktförsäljning, från dagliga beställningar.

När du har beräknat månatlig försäljning per produkt kan du använda ett diagramverktyg för att rita upp det på ett linjediagram, som visas nedan. Här är ett exempel på ett linjediagram som skapats med Ubiq.

Visste du att du kan skapa pivottabeller i Ubiq genom att bara dra och släppa?

Om du vill skapa diagram, instrumentpaneler och rapporter från MySQL/PostgreSQL/SQL Server-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.

  1. Brent Ozar förklarar SQL Server intern och extern fragmentering

  2. Ändra ett SQL Server Agent Schema (T-SQL)

  3. Hur reparerar man en serialiserad sträng som har skadats av en felaktig byte-räknelängd?

  4. Hur du formulerar ditt värde som DBA för finanschefer