如何解决在django中的group_by之后获取多列的前n个值
qs = models.Stats.objects.all().values('player_id').annotate(**player_stats)
我有一个聚合多个列的 GROUP_BY,见上文。
在我的例子中,它产生了 8523 个元素的结果集。
[{'player_id': 1,'abc': 205.0,'def': 53.0,'ghi': 37.0,'jkl': 151.0,'mno': 2.0,'pqr': 959.0,...},{'player_id': 2,{'player_id': 3,...]
我现在想获得不同类别的前 n 名玩家,我的第一个天真的方法是对我想要的每个键的结果集进行排序以获取前 n 名玩家。
qs.order_by('-abc')[:5]
、qs.order_by('-def')[:5]
这很慢,因为它每次都用完整的初始 GROUP_BY
查询访问数据库,这本身就很重。
最后我只需要每个类别的前 5 个(abc
、def
、ghi
...),例如
[{'player_id': 1,'abc': 205.0},{'player_id': 477,'abc': 202.0},{},{}]
我的猜测是我可以通过 Django 的 Window 函数以更有效的方式实现这一点,但我有点迷茫。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。