Fornirò un contesto in modo che abbia senso. Sto catturando le valutazioni dei clienti per i prodotti in una tabella (valutazione) e voglio essere in grado di restituire una media mobile cumulativa dei rating in base al tempo.Come calcolare la media mobile cumulativa in Python/SQLAlchemy/Flask
Un esempio di base segue prendere un voto al giorno:
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...
Sto cercando di pensare a un approccio che non scalerà orribilmente.
La mia idea attuale è quella di avere una funzione che è scattato quando una riga viene inserita nella tabella di valutazione che funziona il Cum Avg base alla riga precedente per quel prodotto
Così i campi sarebbe qualcosa di simile:
TABLE: Rating
| RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg |
Ma questo sembra un modo abbastanza dubbia per archiviare i dati.
Quale sarebbe il (o qualsiasi) modo per realizzare questo? Se dovessi usare il 'trigger' di sorta, come si fa a farlo in SQLAlchemy?
Qualsiasi consiglio è apprezzato!
È possibile eseguire questa operazione in SQL: consultare: http://stackoverflow.com/questions/4107479/subqueries-aggregates-and-aggravation/4107784#4107784 ... Non sono sicuro di come ottenere SQLAlchemy per generare una query simile (e il tuo database potrebbe non supportare la sintassi necessaria.) –
@Sean Vieria: Grazie per il link: so che è possibile in SQL puro, ma ancora una volta questo significa che il numero di voti aumenta, le prestazioni peggiora quando i calcoli vengono fatti su ogni riga. Potrei provare a implementare la mia idea originale di archiviarlo man mano che ogni riga viene inserita come so che verrà scalata. Non ero sicuro se ci fosse qualcosa di fondamentale che stavo trascurando. Grazie per l'aiuto! – mwan