计算多个术语

时间:2013-07-31 16:02:38

标签: django

class Term(models.Model):
    created = models.DateTimeField(auto_now_add=True)   
    term = models.CharField(max_length=255)             

嘿伙计们, 我尝试从我的数据库表中计算重复/多个术语,但我仍然得到了我的表的所有项目({term: a, count: 1, term: a, count: 1,term: b, count: 1,...})的列表,而不是像{term: a, count: 12, term: b, count: 1}

有人有想法吗?

编辑:

ee = Term.objects.annotate(Count("term")).values("term", "term__count")

结果:

[{'term': u'tes', 'term__count': 1}, {'term': u'tes', 'term__count': 1}, 

我的期望:

[{'term': u'tes', 'term__count': 2},  {'term': 'b', 'term__count': 1}

2 个答案:

答案 0 :(得分:2)

https://docs.djangoproject.com/en/dev/topics/db/aggregation/ 说顺序很重要。此外,如果您在模型上有order_by,则会影响它。 怎么样......

ee = Term.objects.values("term").annotate(Count("term")).order_by()

答案 1 :(得分:0)

在SQL中,您不能只在一个查询中执行此操作,而是需要子查询。我猜这与Django是一样的,所以试试这个:

ee = Term.objects.extra(select={'count': "SELECT COUNT(term) FROM appname_term AS subtable WHERE subtable.term = appname_term.term"})

它应该为每个来自ee的术语添加一个count属性,并带有行数。它在主查询中的相同关系上应用子查询。它相当于SQL:

SELECT *, (
    SELECT COUNT(term) 
    FROM appname_term AS subtable
    WHERE subtable.term = appname_term.term
) AS count
FROM appname_term