将SQL max() group by转换为Django



我有一个有两列的表:listing和bid。每个列表可以得到多个出价。我想运行一个Django查询,返回每个列表的最高出价。

在SQL中,我将这样做:
SELECT listing, max(amount) FROM Bid GROUP BY listing 

在django中我尝试了这个。它只返回整个表中最高的出价

Bid.objects.values('listing','amount').aggregate(Max('amount'))

您可以.annotate(…)[Django-doc] these with:

from django.db.models import Max
Bid.objects.values('listing').annotate(
max_amount=Max('amount')
).order_by('listing')

如果listingForeignKey,那么最好对该模型进行注释,例如:

from django.db.models import Max
Listing.objects.annotate(
max_bid=Max('bid__amount')
)

因为这些是Listing模型,因此模型层不会"腐蚀"。

相关内容

  • 没有找到相关文章

最新更新