一、在数据库中rank方法是进行排名的方法
SELECT
city,
RANK () OVER ( ORDER BY avg_table.avg_zf DESC ) AS rank_zf,
RANK () OVER ( ORDER BY avg_table.avg_yw DESC ) AS rank_yw
FROM
( SELECT city, citydm, AVG ( zf ) AS avg_zf, AVG ( yw ) AS avg_yw FROM achievementmanage_examachievementinfo GROUP BY city, citydm ) avg_table
ORDER BY
citydm;
查询结果
首先我们用到了子查询,也就是将一次查询的结果当成另一次查询的来源,我们首先根据城市进行分组获取平均分,然后在使用Rank获取排名。
二、那么在django的orm中如何进行查询呢
from django.db.models.functions import Rank
from django.db.models import F, Avg, Window
ExamAchievementInfo.objects.filter(
project=1
).values('city').annotate(
avg_zf=Avg('zf')
).order_by('citydm').annotate(
rank=Window(
expression=Rank(),
order_by=F('avg_zf').desc()
)
)
首先我们使用values和annotate进行分组,去求每个城市的平均分,然后我们再使用annotate、Window和Rank方法进行排名