You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django新手求助:如何按stock_id分组统计open_price与quantity之和

按股票汇总交易数据的Django查询方案

嘿,作为Django新手,刚接触模型聚合查询确实容易踩坑,我来帮你搞定这个按股票汇总交易数据的需求!

首先,假设你的Trades模型里有和Stock关联的外键(比如名为stock)、open_price(开仓价格)和quantity(持仓数量)字段——如果你的字段名不一样,记得替换成自己的实际字段名哦。

核心查询语句

你需要用到Django ORM的values()和annotate()方法,配合Sum聚合函数来实现分组求和:

from django.db.models import Sum

# 基础版:按stock_id分组,计算每个股票的总开仓价格和总持仓量
trade_summary = Trades.objects.values('stock_id').annotate(
    total_open_price=Sum('open_price'),
    total_quantity=Sum('quantity')
).order_by('stock_id')

进阶:同时获取股票的其他信息

如果想在结果里同时显示股票名称这类Stock模型的字段,可以调整values()里的参数,关联Stock的字段:

# 进阶版:包含股票名称的汇总结果
trade_summary = Trades.objects.values('stock__id', 'stock__name').annotate(
    total_open_price=Sum('open_price'),
    total_quantity=Sum('quantity')
).order_by('stock__id')

如何使用查询结果

你可以通过遍历trade_summary来获取每个分组的数据:

# 遍历基础版结果
for item in trade_summary:
    print(f"股票ID: {item['stock_id']}, 总持仓量: {item['total_quantity']}, 总开仓金额: {item['total_open_price']}")

# 遍历进阶版结果
for item in trade_summary:
    print(f"股票ID: {item['stock__id']}, 股票名称: {item['stock__name']}, 总持仓量: {item['total_quantity']}, 总开仓金额: {item['total_open_price']}")

关键知识点解释

  • values('stock_id'):告诉Django要按stock_id字段进行分组;
  • annotate(Sum('字段名')):对每个分组内的指定字段求和,并给结果起一个自定义的键名(比如total_open_price);
  • order_by():可选,用来让结果按股票ID排序,方便查看。

如果你的模型字段名和我假设的不一样(比如外键字段叫stock_id而不是stock),只需要把stock_id或者stock__id替换成你实际的字段名就可以啦!

内容的提问来源于stack exchange,提问作者Sharpless512

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:00:14