试试这个:)
from django.db.models import Sum, Avg
qs = Trade.objects.values('datetime').order_by('datetime').annotate(
cum_a=Sum('amount'),
cum_t=Sum('trades'),
avg_p=Avg('price')
)
你这样迭代:
for row in qs:
print(row["datetime"], row["cum_a"], row["cum_t"], row["avg_p"])
在SQL方面,您的分组依据
datetime
并为每个组运行聚合。
SELECT "datetime", SUM("amount") AS "cum_a", SUM("trades") AS "cum_t", AVG("price") AS "avg_p"
FROM "Trade"
GROUP BY "datetime"
ORDER BY "datetime"
如果您也想按市场分组:
qs = Trade.objects.values('datetime', 'market').order_by('datetime', 'market') \
.annotate(
cum_a=Sum('amount'),
cum_t=Sum('trades'),
avg_p=Avg('price')
)
for row in qs:
print(row["datetime"], row["market"], row["cum_a"], row["cum_t"], row["avg_p"])