【发布时间】:2011-03-11 04:45:39
【问题描述】:
我正在学习 django。在我的项目中,我无法使用 django ORM 进行查询:
SELECT MIN( id ) AS id, domain, COUNT( * ) AS cnt
FROM app_competition
WHERE word_id = 1545
GROUP BY domain
请帮我做这个查询
【问题讨论】:
我正在学习 django。在我的项目中,我无法使用 django ORM 进行查询:
SELECT MIN( id ) AS id, domain, COUNT( * ) AS cnt
FROM app_competition
WHERE word_id = 1545
GROUP BY domain
请帮我做这个查询
【问题讨论】:
为此,您需要一些Aggregation!
在您的情况下,您需要做两件事:首先,使用values 在您的查询上强制使用 GROUPBY,然后使用内置函数 Min 和 Count 注释您的查询
如果我的 django-orm fu 是正确的,您的查询应该如下所示:
from django.db.models import Min, Count
Competition.objects.values('domain').filter(word_id=1545).annotate(id=Min('id'), cnt=Count('id'))
需要注意的关键事项:您需要在任何注释之前放置 values 调用以强制它为 GROUPBY,然后其余的就很容易解释了。
没有测试查询所以我希望我做对了:)
【讨论】: