将 SQL max() 分组依据翻译成 Django
Translate SQL max() group by to Django
我有一个包含两列的 table:listing 和 bid。每个列表可以得到多个出价。我想 运行 Django 查询 returns 每个列表的最高出价。
在SQL我会这样做:
SELECT listing, max(amount) FROM Bid GROUP BY listing
在 django 中我试过这个。它只是returns整个table
中的单个最高出价
Bid.objects.values('listing','amount').aggregate(Max('amount'))
您可以 .annotate(…)
[Django-doc] 这些:
from django.db.models import Max
Bid.objects.values('listing').<b>annotate(</b>
max_amount=Max('amount')
<b>)</b>.order_by('listing')
如果 listing
是 ForeignKey
,但最好注释该模型,例如:
from django.db.models import Max
<b>Listing</b>.objects.annotate(
max_bid=Max(<b>'bid__amount'</b>)
)
从那时起,这些都是 Listing
模型,因此模型层不会“腐蚀”。
我有一个包含两列的 table:listing 和 bid。每个列表可以得到多个出价。我想 运行 Django 查询 returns 每个列表的最高出价。
在SQL我会这样做:
SELECT listing, max(amount) FROM Bid GROUP BY listing
在 django 中我试过这个。它只是returns整个table
中的单个最高出价Bid.objects.values('listing','amount').aggregate(Max('amount'))
您可以 .annotate(…)
[Django-doc] 这些:
from django.db.models import Max
Bid.objects.values('listing').<b>annotate(</b>
max_amount=Max('amount')
<b>)</b>.order_by('listing')
如果 listing
是 ForeignKey
,但最好注释该模型,例如:
from django.db.models import Max
<b>Listing</b>.objects.annotate(
max_bid=Max(<b>'bid__amount'</b>)
)
从那时起,这些都是 Listing
模型,因此模型层不会“腐蚀”。