Daré un contexto para que tenga sentido. Estoy capturando las valoraciones de los clientes de los productos en una tabla (clasificación) y quiero poder devolver una media móvil acumulativa de las calificaciones según el tiempo.Cómo calcular la media móvil acumulativa en Python/SQLAlchemy/Flask
Un ejemplo básico sigue teniendo una calificación por día:
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...
Estoy tratando de pensar en un enfoque que no se escala horrible.
Mi idea actual es tener una función que se dispara cuando se inserta una fila en la tabla de clasificación que se resuelve el Cum Promedio basado en la fila anterior de ese producto
Así los campos sería algo así como:
TABLE: Rating
| RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg |
Pero esto parece una manera bastante peligrosa de almacenar los datos.
¿Cuál sería la (o alguna) forma de lograr esto? Si tuviera que usar el 'disparador' de géneros, ¿cómo haces eso en SQLAlchemy?
¡Todos y cada uno de los consejos apreciados!
Definitivamente es posible hacer esto en SQL - ver: http://stackoverflow.com/questions/4107479/subqueries-aggregates-and-aggravation/4107784#4107784 ... No estoy seguro de cómo obtener SQLAlchemy para generar una consulta como esa (y su base de datos puede no ser compatible con la sintaxis necesaria). –
@Sean Vieria: Gracias por el enlace - Sé que es posible en SQL puro, pero nuevamente esto significa que a medida que crece el número de evaluaciones, el rendimiento empeora a medida que los cálculos se realizan en cada fila. Podría intentar implementar mi idea original de almacenarlo a medida que se ingresa cada fila, ya que sé que se escalará. Simplemente no estaba seguro de si había algo básico que estaba pasando por alto. ¡Gracias por la ayuda! – mwan