[英]django aggregate, annotate with range
class Sold(model.Model)
product = models.ForeignKey(Product)
model_name = models.ForeignKey(ProductModels)
sold_date = models.DateField()
model_qty = models.IntegerField()
def __unicode__(self):
return self.sold_date
我想知道在2014年1月1日至1月31日期間售出了多少model_qty
:
這是我的查詢:
a = Sold.objects.filter().aggregate(res=Sum('model_qty'))
我打印時得到的a['res'] = 12
,這很好,
現在我用這樣的range
:
a = Sold.objects.filter(sold_date__range = ('2014-01-01' , '2014-01-31')).annotate(res=Sum('model_qty'))
a.aggregate(Sum('model_qty'))
我得到了答案。 有沒有更好的方式編寫此查詢?
您編寫的查詢在SQL中用類似
select sum(model_qty) from sold where sold_date > '2014-01-01' and sold_date < '2014-01-31'
它已經盡可能地得到了優化(除非您可以進行一些特定於數據庫的優化),所以您遇到的任何性能問題都可能是由查詢數量引起的。
不過,我猜測您實際上並未對其進行概要分析,也未使用實時數據運行查詢來測試性能。 我建議您在嘗試過多優化代碼之前執行此操作(使用用於報告的調試工具欄)。 您很可能會發現瓶頸在其他地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.