Podam pewien kontekst, więc ma to sens. Przechwytywam Oceny Klientów dla Produktów w tabeli (Rating) i chcę mieć możliwość zwrócenia Łącznej średniej ruchomej ocen według czasu.Jak obliczyć łączną średnią ruchomą w Pythonie/SQLAlchemy/Flask
Podstawowym przykładem następująco biorąc rating dziennie:
02 FEB - Rating: 5 - Cum Avg: 5
03 FEB - Rating: 4 - Cum Avg: (5+4)/2 = 4.5
04 FEB - Rating: 1 - Cum Avg: (5+4+1)/3 = 3.3
05 FEB - Rating: 5 - Cum Avg: (5+4+1+5)/4 = 3.75
Etc...
Staram się myśleć o podejściu, które nie będą skalowane strasznie.
Mój obecny pomysł ma mieć funkcję, która jest wyzwolony, gdy wiersz jest wstawiany do tabeli rankingu, który działa z cum Śr podstawie poprzedniego rzędu dla tego produktu
Więc pola byłoby coś takiego:
TABLE: Rating
| RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg |
Ale wydaje się, że dość sprytny sposób przechowywania danych.
Jaki byłby (lub jakikolwiek) sposób na osiągnięcie tego? Gdybym miał użyć "rodzaju wyzwalania", jak to robisz w SQLAlchemy?
Wszelkie rady zostały docenione!
Z pewnością można to zrobić w SQL - patrz: http://stackoverflow.com/questions/4107479/subqueries-aggregates-and-aggravation/4107784#4107784 ... Nie jestem pewien, jak uzyskać SQLAlchemy generować takie zapytanie (i twoja baza danych może nie obsługiwać niezbędnej składni). –
@Sean Vieria: Dzięki za link - Wiem, że to możliwe w czystym SQL, ale znowu oznacza to, że liczba ocen rośnie, wydajność pogarsza się, gdy obliczenia są wykonywane w każdym rzędzie. Mogę spróbować wprowadzić mój pierwotny pomysł przechowywania go, ponieważ każdy wiersz jest wprowadzany, tak jak wiem, który będzie skalowany. Po prostu nie byłem pewien, czy jest coś podstawowego, co przeoczyłem. Dzięki za pomoc! – mwan