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.