簡體   English   中英

django聚合,用范圍注釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM