sql >> Databáze >  >> RDS >> Mysql

Jak vypočítat klouzavý průměr v MySQL

Mnohokrát možná budete muset vypočítat klouzavý průměr v MySQL, také známý jako Simple Moving Average. Např. průměrný prodej za posledních 5 dní . V MySQL není žádná funkce pro výpočet klouzavého průměru. Pojďme se tedy podívat, jak vypočítat klouzavý průměr v MySQL pomocí SQL dotazu.

Jak vypočítat klouzavý průměr v MySQL

Zde jsou kroky pro výpočet klouzavého průměru v MySQL. Řekněme, že máte následující tabulku, která obsahuje denní údaje o prodeji

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

mysql> insert into sales values('2020-01-01',20),
('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),
('2020-01-05',20),('2020-01-10',20),('2020-01-06',25),
('2020-01-07',15),('2020-01-08',30),('2020-01-09',20);

mysql> select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   20 |
| 2020-01-02 |   25 |
| 2020-01-03 |   15 |
| 2020-01-04 |   30 |
| 2020-01-05 |   20 |
| 2020-01-10 |   20 |
| 2020-01-06 |   25 |
| 2020-01-07 |   15 |
| 2020-01-08 |   30 |
| 2020-01-09 |   20 |
+------------+------+

Bonusové čtení: Jak vypočítat průměrný prodej za den v MySQL

Řekněme, že chcete vypočítat klouzavý průměr prodeje za posledních 5 dní. Zde je návod, jak to udělat pomocí SQL dotazu v MySQL.

mysql> SELECT
       a.order_date,
       a.sale,
       Round( ( SELECT SUM(b.sale) / COUNT(b.sale)
                FROM sales AS b
                WHERE DATEDIFF(a.order_date, b.order_date) BETWEEN 0 AND 4
              ), 2 ) AS '5dayMovingAvg'
     FROM sales AS a
     ORDER BY a.order_date;
+------------+------+---------------+
| order_date | sale | 5dayMovingAvg |
+------------+------+---------------+
| 2020-01-01 |   20 |         20.00 |
| 2020-01-02 |   25 |         22.50 |
| 2020-01-03 |   15 |         20.00 |
| 2020-01-04 |   30 |         22.50 |
| 2020-01-05 |   20 |         22.00 |
| 2020-01-06 |   25 |         23.00 |
| 2020-01-07 |   15 |         21.00 |
| 2020-01-08 |   30 |         24.00 |
| 2020-01-09 |   20 |         22.00 |
| 2020-01-10 |   20 |         22.00 |
+------------+------+---------------+

Ve výše uvedeném dotazu provedeme vlastní spojení naší prodejní tabulky se sebou samým a pro každou hodnotu order_date vypočítáme průměr na základě údajů o prodeji za předchozích 5 dní. V našem dotazu SQL provádí vnitřní dotaz průměrný výpočet na základě údajů o prodeji shromážděných pro každé časové okno a.order_date (před 5 dny) pomocí funkce datediff.

Bonusové čtení: Jak vypočítat klouzavý průměr v Redshift

Pokud chcete změnit časové okno, stačí změnit část tučně (MEZI 0 a 4) ve výše uvedeném dotazu.

Můžete také přidat další filtry aktualizací klauzule WHERE ve vnořeném dotazu.

Výše uvedený dotaz můžete upravit tak, aby vypočítal klouzavý průměr v MySQL, podle vašich požadavků.

K vykreslení klouzavého průměru na spojnicový graf nebo řídicí panel můžete také použít nástroj pro vytváření grafů. Zde je příklad spojnicového grafu vytvořeného pomocí Ubiq.

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

  1. T-SQL úterý #106:MÍSTO spouštěčů

  2. Problémy při importu souboru txt do postgres pomocí php

  3. Hierarchická SQL otázka

  4. Nelze se připojit k MySQL 4.1+ pomocí starého ověřování