django count 具有相同相关记录的记录数

Posted

技术标签:

【中文标题】django count 具有相同相关记录的记录数【英文标题】:django count number of records with the same related record 【发布时间】:2013-11-25 10:57:44 【问题描述】:

我正在使用 django 1.5.5 和 mysql

我有这个模型

class Student(models.Model):
     username = models.CharField(max_length=200,unique = True)

class Score(models.Model)
     student = models.ForeignKey(Student)
     date = models.DateTimeField()
     score = models.IntegerField()

我想获取所有分数为 0 的记录,并且同一学生还有另一个 0。

我尝试过的:

scores = Score.objects.annotate(score_count = Count('student__id')).filter(score = 0 , score_count__gt = 1)

我尝试过的另一件事是我认为确实可以满足我的需求,但需要 2 个查询。

students = Score.objects.filter(score = 0).values('student__id').annotate(c=Count('student__id')).filter(c__gt=1).values_list('student__id',flat=True)
score = Score.objects.filter(score = 0 , student__id__in = students)

有什么方法可以在一个查询中完成吗?

【问题讨论】:

Score.objects.values('student__id').filter(score=0).annotate(c=Count('score')).filter(c__gt=1) ?? @AamirAdnan 这只会给我值而不是分数记录。 【参考方案1】:
no_of_records = len(Score.objects.values('student__id').filter(score=0).annotate(c=Count('score')‌​).f‌​ilter(c__gt=1)) 

no_of_records = len(Score.objects.values('student__id').filter(score=0).annotate(c=Count('score')‌​).f‌​ilter(c__gt=1)).count() 

【讨论】:

以上是关于django count 具有相同相关记录的记录数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Execution Plan--COUNT相关测试

即使使用 parallel(8) 提示,具有数百万条记录的表中的 Count(1) 也很慢

联接表并获取特定记录的计数

查找所有具有相同姓氏和相同邮政编码的记录

使用 SQL 判断一个相关表的所有记录是不是具有相同的值

具有百万条记录的表中的Count即使有parallel提示也很慢