sql – 如何使用Django Queryset在列中找到top-X最高值而不截断
发布时间:2020-12-12 06:47:18 所属栏目:MsSql教程 来源:网络整理
导读:我有以下Django模型: class myModel(models.Model): name = models.CharField(max_length=255,unique=True) score = models.FloatField() 此模型的数据库中有数千个值.我想高效优雅地使用QuerySets来获得前十名的最高分,并按分数的降序显示他们的分数.到目前
我有以下Django模型:
class myModel(models.Model): name = models.CharField(max_length=255,unique=True) score = models.FloatField() 此模型的数据库中有数千个值.我想高效优雅地使用QuerySets来获得前十名的最高分,并按分数的降序显示他们的分数.到目前为止它相对容易. 皱纹就在这里:如果有多个myModel并列第十名,我想全部展示它们.我不想只看到其中一些.这会过度地给某些名字带来任意优势.如果绝对必要,我可以在Querysets之外进行一些后DB列表处理.但是,我看到的主要问题是我无法通过apriori知道将我的数据库查询限制在前10个元素,因为据我所知,可能有一百万条记录全部并列第十位. 我是否需要按分数对所有myModel进行排序,然后对它们进行一次传递以计算得分阈值?然后使用该计算得分阈值作为另一个Queryset中的过滤器? 如果我想用直接SQL编写这个,我甚至可以在一个查询中执行此操作吗? 解决方法当然,您可以在一个SQL查询中执行此操作.使用django ORM生成此查询也很容易实现.top_scores = (myModel.objects .order_by('-score') .values_list('score',flat=True) .distinct()) top_records = (myModel.objects .order_by('-score') .filter(score__in=top_scores[:10])) 这应该生成单个SQL查询(带子查询). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |