我正在尝试在Django ORM中转换以下查询:
SELECT
MONTH(date) AS Month,
col1,
col2,
col3 col3,
SUM(col4) col4,
SUM(col5) col5
FROM
table1
WHERE
date BETWEEN '2018-07-19' AND '2018-10-17'
GROUP BY 1 , 2 , 3 , 4
UNION ALL
SELECT
MONTH(date) AS Month,
col1,
col2,
0 col3,
SUM(col4) col4,
0 col5
FROM
table2
WHERE
date BETWEEN '2018-07-19' AND '2018-10-17'
GROUP BY 1 , 2 , 3 , 4
在MySQL Workbench中的效果很好。但是在django中,我看到了错误-我不能这样做:
result2 = table2.objects.\
filter( date__range=( self.data['start_date'], self.data['end_date'] ) ).\
annotate(month=TruncMonth('date')).\
values("month", "col1", "col2", "0").\
annotate( col4=Sum('col4'), col5=Sum(0))
因为“无法将关键字'0'解析到字段中。”
您对此有什么想法吗?想创建2个相同的对象,然后使用 union()合并表
我正在使用Django 1.11
答案 0 :(得分:0)
如果要向查询集添加固定值的列,则可以使用Value expressions:
from django.db.models import Value, IntegerField
result2 = table2.objects.annotate(col5=Value(0, output_field=IntegerField())