2016-09-20 76 views
3

我在這裏和django documentation中發現了一些解決方案,但我無法設法使一個查詢以我想要的方式工作。Django在'group by'之後的列的另一列的總和值

我有以下型號:

class Inventory(models.Model): 
    blindid = models.CharField(max_length=20) 
    massug = models.IntegerField() 

我想算Blind_ID的號碼,然後求和massug他們進行分組後。

我目前Django的ORM

samples = Inventory.objects.values('blindid', 'massug').annotate(aliquots=Count('blindid'), total=Sum('massug')) 

它不能正確計算(它顯示只有一個),因此這不是正確的總結。它似乎只是得到第一個結果......我也嘗試使用Count('blindid', distinct=True)Count('blindid', distinct=False)以及。

這是使用samples.query的查詢結果。 Django是由兩列編組......

SELECT "inventory"."blindid", "inventory"."massug", COUNT("inventory"."blindid") AS "aliquots", SUM("inventory"."massug") AS "total" FROM "inventory" GROUP BY "inventory"."blindid", "inventory"."massug" 

這應該是原始的SQL

SELECT blindid, 
     Count(blindid) AS aliquots, 
     Sum(massug) AS total 
     FROM inventory 
     GROUP BY blindid 

回答

3

試試這個:

samples = Inventory.objects.values('blindid').annotate(aliquots=Count('blindid'), total=Sum('massug')) 
+0

它的工作。我不知道我可以選擇註釋字段中以前不在查詢中的列。太好了,謝謝! – mk2

+0

這很好,但如果我想要取代庫存對象實例而不是字典呢? –