2012-05-06 111 views
1

尊敬的StackOverFlow社区:GROUP BY在Django查询

我需要你的帮助来执行下面的SQL查询。

select DATE(creation_date), COUNT(creation_date) from blog_article WHERE creation_date BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE() GROUP BY DATE(creation_date) AND author="scott_tiger"; 

这里是我的Django模型

class Article(models.Model): 
    title = models.CharField(...) 
    author = models.CharField(...) 
    creation_date = models.DateField(...) 

我怎么能形成上述的Django使用查询汇总()和注释()函数。我创造了这样的事情 -

now = datetime.datetime.now() 
date_diff = datetime.datetime.now() + datetime.timedelta(-30) 
records = Article.objects.values('creation_date', Count('creation_date')).aggregate(Count('creation_date')).filter(author='scott_tiger', created_at__gt=date_diff, created_at__lte=now) 

当我运行此查询它给了我下面的错误 -

'Count' object has no attribute 'split' 

任何想法谁使用它?

+0

你为什么要做* Count('creation_date')*? SQL计数并不适用于结果集中的列。 – McGarnagle

+0

但它可以,也许更明确地指出作者想要计算的东西。 – Paragon

回答

0

从值中删除Count('creation_date')并在过滤器后添加annotate(Count('creation_date'))。

0

尝试

records = Article.objects.filter(author='scott_tiger', created_at__gt=date_diff, 
    created_at__lte=now).values('creation_date').aggregate(
    ccd=Count('creation_date')).values('creation_date', 'ccd') 

您需要使用creation_date__count或自定义名称(ccd这里)指的计数结果列,aggregate()后。
另外,values()之前aggregate限制group by列和最后value()宣布列为select ed。不需要按照基于行组的COUNT进行分组。