python - Django,在 Case & When 中使用带注释的字段或 SQL 函数
问题描述
我正在尝试进行查询,在该查询中我使用列的平均值与其最新值,然后在 Case 和 When 中使用它。我可以成功注释每月平均和最新字段,但不能在数据库中比较它们:
这是我想做的方向
latest_known_kpi_obj = KPIs.objects.filter(tag_count__isnull=False, group__id=OuterRef(ID))
tag_count_of_latest = Subquery(latest_known_kpi_obj.values(ASSIGNED_TAG_COUNT)[:1])
places_count_of_latest = Subquery(latest_known_kpi_obj.values(PLACES_COUNT)[:1])
user = self.request.user
self.kpis = user.user_selected_kpis.get_all_kpis_qs()
kpis_monthly_averages_annotations = {}
latest_kpis = {}
for kpi in self.kpis:
latest_kpis[f'{kpi.internal_name}_latest'] = Subquery(latest_known_kpi_obj.values(kpi.internal_name)[:1])
kpis_monthly_averages_annotations[f'{kpi.internal_name}_trend'] = Case(
When(condition=Avg(f'farm_scores__{kpi.internal_name}',
filter=Q(farm_scores__date__range=month_range)) <
(latest_kpis[f'{kpi.internal_name}_latest']), then=1),
When(Avg(f'farm_scores__{kpi.internal_name}',
filter=Q(farm_scores__date__range=month_range)) >
(latest_kpis[f'{kpi.internal_name}_latest']), then=-1),
default=0
)
query_set = (Group.objects.filter(**filters).
annotate(**kpis_monthly_averages_annotations,**latest_kpis)
这是不可能的
'<' not supported between instances of 'Avg' and 'Subquery'
解决方案
推荐阅读
- javascript - 如何将我的交易部署到 eth 网络?我将我的系统终端与 infura 主网一起使用,但它似乎不起作用
- javascript - CSS中的模糊文本动画
- c# - 单元测试时如何在 Blazor 中模拟 InputFile (csv)?
- html - 如何创建主要内容的最大宽度和侧边栏的最小宽度的 CSS 网格?
- ssh - vnc 查看器无法通过 ssh 隧道连接到 vncserver,但直接连接工作正常
- javascript - Firefox WebExtension:输入类型=“颜色”关闭扩展弹出窗口
- javascript - 如何通过谷歌应用脚本向币安发送订单?
- python - 如何在返回元组的方法中引发异常?
- ssis - SSIS 2008 - 在平面文件目标中导出为指数值的浮点值
- python - OpenCV 有时会在 imshow (R PI / Python) 导致分段错误