Stai usando l'aggregato
sbagliato . count(expression)
conta il numero di righe per le quali l'espressione non è nullo. Se vuoi una somma, usa sum(expression)
:
db.session.query(func.sum(Item.data['cost'].astext.cast(Numeric))).\
filter(Item.data['surcharge'].astext.cast(Numeric) > 1).\
scalar()
Tieni presente che i valori monetari e la matematica binaria in virgola mobile sono una pessima combinazione a causa di i float binari non sono in grado di rappresentare tutti i valori decimali
. Usa invece un tipo monetario
o Numeric
in tal caso SQLAlchemy utilizza Decimal
per rappresentare i risultati in Python.