作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我喜欢在 Django 中执行以下查询,最好不使用迭代。我只希望数据库调用返回下面查询表示的结果。不幸的是根据the docs这似乎不可能;只有Avg
、Max
和Min
等通用函数可用。目前我使用的是 django 1.4,但我很高兴重写 django 1.8 的东西(因此出现了文档页面;我听说 1.8 比 1.4 做得更好)
select sum(c.attr1 * fs.attr2)/ sum(c.attr1) from fancyStatistics as fs
left join superData s on fs.super_id=s.id
left join crazyData c on s.crazy_id=c.id;
注意:
直接在 django 中执行此操作的主要原因是,如果我们想将数据库从 MySQL 更改为更适合 django 的数据库,最好不必重写所有查询。
最佳答案
您应该能够使用 F 表达式获得聚合来完成您想要的大部分操作,而无需使用 SQL。
https://docs.djangoproject.com/en/1.8/topics/db/aggregation/#joins-and-aggregates
aggregate_dict = FancyStatistics.objects.all()\
.aggregate(
sum1=Sum(
F('superdata__crazydata__attr1') * F('attr2'), output_field=FloatField()
) ,
sum2=Sum('superdata__crazydata__attr1')
)
)
result = aggregate_dict['sum1'] / aggregate_dict['sum2']
如果使用的数据类型不同,则需要指定输出字段。
关于python - 如何在 django 的 sql 查询中进行一般数学运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346071/
我是一名优秀的程序员,十分优秀!