python - 如何使用 django 过滤器“选择不同的 on”作为子查询
问题描述
我正在为我的 django 项目创建一个搜索功能,并且想知道如何在按玩家得分的数量对行进行排序的同时对行进行分组。
我希望能够对它们进行分组,当它找到具有相同名称的值时,它只取第一个值
我在 postgresql 上找到的解决方案
select * from
(select distinct on (name) * from database_manager_player) t
order by pts desc;
数据库值:
姓名 | 团队 | 分 |
---|---|---|
安德鲁 | 一个 | 20 |
安德鲁 | 乙 | 24 |
安德鲁 | C | 12 |
琼斯 | 乙 | 8 |
琼斯 | C | 6 |
查询后的预期结果:
姓名 | 团队 | 分 |
---|---|---|
安德鲁 | 一个 | 20 |
琼斯 | 乙 | 8 |
我想知道是否有办法在 django 中编写类似的代码。
在views.py中:
def get_queryset(self):
qs = Player.objects.all().order_by('-pts')
sort_by = self.request.GET.get("sort")
if sort_by is not None and sort_by != str(0)
sort_by = "-" + sort_by
# query here
使用 'qs' 我怎么能在 if 语句中做一些事情,以便它与 postgresql 中的一样。
解决方案
要选择 distinct on,您必须使用子查询
ids = qs.distinct("name").order_by().values_list("pk", flat=True)
qs = qs.filter(pk__in=ids)
推荐阅读
- sml - 在标准 ML 中使用乘法和迭代的幂函数
- reactjs - 从用户获取代码输入并像 Codepen 一样运行时,我应该采取哪些安全措施?
- angular - 如何为Angular正确设置cdk拖放?
- r - 如何在闪亮仪表板中创建让每个选项卡具有自己的日期输入范围的选项
- python - Django:警告-不允许的方法(POST)
- apache-kafka - Kafka Streams 和 Spring Cloud Stream - 处理器效率
- java - 安装新软件后添加了 Java EE,但 Dynamic Web 项目尚不可用
- javascript - Webkit画中画在IOS上自行重置
- python - 如何同时将树莓派设置为服务器和客户端?
- gradle - 如何使用 gradle 2.3 创建 Zip 文件