django的orm中Rank方法的使用

一、在数据库中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方法进行排名

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值