sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar glidande medelvärde i MySQL

Många gånger kan du behöva beräkna glidande medelvärde i MySQL, även känt som Simple Moving Average. T.ex. genomsnittlig försäljning de senaste 5 dagarna . I MySQL finns det ingen funktion för att beräkna glidande medelvärde. Så låt oss se hur man beräknar glidande medelvärde i MySQL med hjälp av SQL-fråga.

Hur man beräknar glidande medelvärde i MySQL

Här är stegen för att beräkna glidande medelvärde i MySQL. Låt oss säga att du har följande tabell som innehåller dagliga försäljningsdata

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

Bonusläsning: Hur man beräknar genomsnittlig försäljning per dag i MySQL

Låt oss säga att du vill beräkna det glidande genomsnittliga försäljningen för de senaste 5 dagarna. Så här kan du göra det med SQL-fråga i 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 |
+------------+------+---------------+

I ovanstående fråga gör vi en självkoppling av vår försäljningstabell med sig själv, och för varje order_date-värde beräknar vi genomsnittet baserat på försäljningsdata för de föregående 5 dagarna. I vår SQL-fråga gör den inre frågan den genomsnittliga beräkningen, baserat på försäljningsdata som samlats in för varje a.order_dates tidsfönster (föregående 5 dagar) med funktionen datediff.

Bonusläsning: Hur man beräknar glidande medelvärde i rödförskjutning

Om du vill ändra ditt tidsfönster, ändra bara delen i fetstil (MELLAN 0 och 4) i ovanstående fråga.

Du kan också lägga till fler filter genom att uppdatera WHERE-satsen i den kapslade frågan.

Du kan anpassa frågan ovan för att beräkna glidande medelvärde i MySQL, enligt dina krav.

Du kan också använda ett diagramverktyg för att plotta glidande medelvärde på ett linjediagram eller instrumentpanel. Här är ett exempel på ett linjediagram skapat med Ubiq.

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

  1. SQL-fråga för att hitta saknade rader mellan två relaterade tabeller

  2. Finns det något som en zip()-funktion i PostgreSQL som kombinerar två arrayer?

  3. Hur man skapar en tabell från utvalda frågeresultat i SQL Server 2008

  4. Det effektivaste sättet att lagra IP-adress i MySQL