需求说明:按产品、价格分组统计数据,采用Django ORM语句写法为:
res = CtProductPrice.objects.filter(umark=0, mdate__contains=yearmonth ).values_list(
'product_id',
'price'
).annotate(
productnum = Count('product_id') ,
countprice = Count('price') ,
sumnum = Sum('num') ,
sumprice = Sum( F('price') * F('num'), output_field=DecimalField() )
).values(
'productnum',
'countprice',
'sumnum',
'sumprice',
'product_id'
)
打印查询语句 print( res.query )查看语句是否符合SQL语法
其中遇到错误:Expression contains mixed types. You must set output_field
解决办法:引入from django.db.models import Count, Sum, F, DecimalField,F表达式运算增加output_field类型 Sum( F('price') * F('num'), output_field=DecimalField() )
参考资料:https://docs.djangoproject.com/en/2.1/ref/models/expressions/