sql >> Databáze >  >> RDS >> Database

SQL dotaz pro porovnání prodeje produktů podle měsíce

Mnohokrát budete muset porovnat prodeje produktů podle měsíců vedle sebe, abyste zjistili, jak si vedou. Zde je dotaz SQL pro porovnání prodeje produktů podle měsíce, pokud jsou vaše data uložena v databázích MySQL/PostgreSQL/SQL Server.

Dotaz SQL pro porovnání prodeje produktů podle měsíce

Řekněme, že máte tabulku prodej (datum_objednávky, produkt, sleva) který obsahuje denní prodeje všech vašich produktů.

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

Dotaz SQL pro porovnání prodeje produktů podle měsíce

Ve většině případů budete mít prodejní řádky pro všechny vaše produkty pod sebou, v samostatných řádcích, nikoli v samostatných sloupcích. Pokud chcete porovnat prodeje produktů podle měsíců, musíte tato data seřadit podle produktu sloupec.

Zde je dotaz na sestavení tabulky prodeje podle produktu sloupec. Podíváme se na to podrobně

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

Ve výše uvedeném dotazu používáme funkci DATE_FORMAT k získání názvů měsíců od order_date sloupec. Dále používáme IF příkaz k vytvoření kontingenční tabulky podle produktu sloupec. V tomto případě pro každý řádek příkaz IF zkontroluje hodnotu sloupce produktu a přidá hodnotu prodeje do sloupce označeného „Pero“ nebo „Papír“ v závislosti na názvu produktu. Také seskupujeme podle názvu měsíce, abychom získali měsíční prodeje produktů z denních objednávek.

Po výpočtu měsíčního prodeje na produkt můžete pomocí nástroje pro vytváření grafů tento produkt vykreslit do spojnicového grafu, jak je znázorněno níže. Zde je příklad spojnicového grafu vytvořeného pomocí Ubiq.

Věděli jste, že v Ubiq můžete vytvářet kontingenční tabulky pouhým přetažením?

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze MySQL/PostgreSQL/SQL Server, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. Špatné návyky :Při výběru klíčů se zaměřte pouze na místo na disku

  2. Fulltextové vyhledávání v Postgres nebo CouchDB?

  3. MySQL Vytvářejte příkazy View, Nahraďte View a Drop View s příklady

  4. PŘÍPAD SQL:Poznejte a vyhněte se 3 méně známým potížím