sql >> Database teknologi >  >> RDS >> Database

SQL-forespørgsel til at sammenligne produktsalg efter måned

Mange gange bliver du nødt til at sammenligne produktsalg efter måned side om side for at bestemme, hvordan de klarer sig. Her er en SQL-forespørgsel til at sammenligne produktsalg efter måned, hvis dine data er gemt i MySQL/PostgreSQL/SQL Server-databaser.

SQL-forespørgsel til at sammenligne produktsalg efter måned

Lad os sige, at du har en tabel salg(ordre_dato, produkt, udsalg) der indeholder daglige salg af alle dine 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-forespørgsel for at sammenligne produktsalg efter måned

I de fleste tilfælde vil du have salgsrækker for alle dine produkter under hinanden, i separate rækker i stedet for separate kolonner. Hvis du vil sammenligne produktsalg efter måned, skal du pivotere disse data efter produkt kolonne.

Her er forespørgslen om at pivotere din salgstabel efter produkt kolonne. Vi vil se nærmere på det

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 ovenstående forespørgsel bruger vi funktionen DATE_FORMAT til at få månedsnavne fra order_date kolonne. Yderligere bruger vi IF-sætning at oprette pivottabel efter produkt kolonne. I dette tilfælde vil IF-erklæringen for hver række kontrollere produktkolonnens værdi og tilføje salgsværdien til enten kolonne mærket 'Pen' eller 'Papir' afhængigt af produktnavnet. Vi grupperer også efter månedsnavn for at få månedligt produktsalg fra daglige ordrer.

Når du har beregnet det månedlige salg pr. produkt, kan du bruge et diagramværktøj til at plotte det på et linjediagram, som vist nedenfor. Her er et eksempel på et linjediagram, der er oprettet ved hjælp af Ubiq.

Vidste du, at du kan oprette pivottabeller i Ubiq ved blot at trække og slippe?

Hvis du vil oprette diagrammer, dashboards og rapporter fra MySQL/PostgreSQL/SQL Server-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. Fælles tabeludtryk, hvorfor semikolon?

  2. Hvordan skriver man en funktion, der returnerer tekst eller heltalsværdier?

  3. Brydning af Azure-gabet:Administrerede forekomster

  4. Jeg bliver ved med at få fejlrelationen [TABEL] eksisterer ikke