我有一份 NFL 中每支球隊的統計資料清單。每周我都有一個函式,它遍歷整個聯盟并使用列舉,對每個統計類別中的球隊進行排名,然后保存到資料庫中。
我的問題是......如果多個團隊具有相同的價值,我如何給他們相同的排名?
例如,如果愛國者隊和巨人隊平均每場比賽得到 30 分,那是聯盟中最好的,我如何讓他們都排名第一,而下一支球隊從第三名開始?
下面是我目前對團隊的排名方式,感謝您提供的任何幫助或提示。
for team in TeamName.objects.filter(league__name='NFL'):
for count, value in enumerate(NFLTeamStats.objects.all().values(
'name', 'avg_points').order_by(
'-avg_points'), start=1):
if value['name'] == team.pk:
avg_points_rank = count
uj5u.com熱心網友回復:
您可以使用Window函式和Rank 使用以您描述的確切方式遞增的等級來注釋每一行
from django.db.models import F, Window
from django.db.models.functions import Rank
for stats in NFLTeamStats.objects.annotate(
rank=Window(expression=Rank(), order_by=F('avg_points').desc())
):
print(stats, stats.rank)
uj5u.com熱心網友回復:
不幸的是,在這種情況下,我看不到任何調整列舉的方法。您必須存盤自己的計數器并比較每次迭代的最后一次:
rank = 0
last_points = -1
for value in NFLTeamStats.objects.all().values('name', 'avg_points').order_by('-avg_points')
if value['name'] == team.pk:
if value['avg_points'] > last_points:
rank = 1
avg_points_rank = rank
last_points = value['avg_points']
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311130.html
