尝试显示基于AVG的TOP 10商业人气列表。一切正常,但我正在尝试添加其他条件,例如仅包括至少10票的企业。
这适用于AVG,包含所有结果:
Feedvote.objects.filter(site_id=settings.SITE_ID).annotate(
voteavg=Avg('feedvote')).order_by('-voteavg')[:10]
这里尝试添加至少10票的HAVING条件:
编辑:当我在下面运行此代码时,我什么都没得到,没有错误,没有值。
Feedvote.objects.filter(city=settings.SITE_ID).annotate(
voteavg=Avg('feedvote')).annotate(
count_status=Count('business')).filter(
count_status__gt=10).order_by('-voteavg')[:10]
答案 0 :(得分:0)
它生成的SQL不会返回任何数据。这是因为第二个注释调用是根据第一个的结果计算的。您可以尝试使用它们来避免这种情况。
Feedvote.objects.filter(city=settings.SITE_ID).annotate(
voteavg=Avg('feedvote'),
count_status=Count('business', distinct=True))
答案 1 :(得分:0)
我认为你应该把所有注释放在一起:
Feedvote.objects.filter(site_id=settings.SITE_ID).annotate(voteavg=Avg('feedvote'),count_status=Count('business')).filter(count_status__gte=10).order_by('-voteavg')[:10]
答案 2 :(得分:0)
感谢所有回复!我把它全部搞定了。问题是Django想要根据Business
表值查询 Feedvote
表。在SQL中,我将查询Feedvote
表,Business
表为JOIN
。 Django不这么想。
Business.objects.filter(city_id=settings.SITE_ID)
.annotate(count_status=Count('feedvotes__business'))
.filter(count_status__gte=10)
.annotate(voteavg=Avg('feedvotes__feedvote'))
.order_by('-voteavg')[:10]