如何使用带有分组,平均值和“ IN”的Django模型创建查询; [英] How to create query using Django Models with grouping , average and "IN"

查看:92
本文介绍了如何使用带有分组,平均值和“ IN”的Django模型创建查询;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人知道如何构建这样的原始查询吗?

  SELECT week_number,part,type,AVG(col1),AVG (col2),AVG(col3),(AVG(col1)+ AVG(col2)+ AVG(col3))作为来自表1 
的总计
WHERE location ='TgR'
AND week_number BETWEEN 38 AND 42
和部分输入('Q','F')
GROUP BY week_number,部分输入

在Django模型中?完全不知道该怎么做



我的模型:

  class testTable(models.Model):
日期= models.DateField(verbose_name = Date)
week_number = models.CharField(max_length = 2,verbose_name = Week number)
位置= models.CharField(max_length = 10,verbose_name = Location)
part = models.CharField(max_length = 10,verbose_name = Part)
col1 = models.CharField(max_length = 20,verbose_name = Col1)
col2 = models.CharField(max_length = 20,verbose_name = Col2)
col3 = models.CharField(max_length = 20,verbose_name = Col3)

def __unicode __(self):
return str(self.location)+'-'+ str(self.date)+'-'+ str(self.part)

谢谢,

解决方案

<$ p从django.db.models导入$ p> 从django.db.models导入Avg
导入FloatField
query_set = testTable.objects.filter(location ='TgR',\
part__in = ['Q ','F'],week_number__lte = 38,week_number__gte = 42).\
合计(col1_avg = Avg('col1'),col2_avg = Avg('col2'),col3_avg = Avg('col3') ,\
Total =(Avg('col1',output_field = FloatField())+ Avg('col2',output_field = FloatField())+ Avg('col3',output_field = FloatField()))

从上面的查询集中可以获取值,也可以参考文档


Does anyone know how to build such raw query:

SELECT week_number, part, type,  AVG(col1), AVG(col2), AVG(col3), ( AVG(col1) + AVG(col2) + AVG(col3) ) as Total
FROM table1
WHERE location = 'TgR'
AND week_number BETWEEN 38 AND 42
AND part IN ('Q', 'F')
GROUP BY week_number, part, type

in Django model ? completely have no idea how to do this

My model:

class testTable(models.Model):
    date = models.DateField( verbose_name="Date" )
    week_number = models.CharField(max_length=2, verbose_name="Week number")
    location = models.CharField(max_length=10, verbose_name="Location")
    part = models.CharField(max_length=10, verbose_name="Part")
    col1 = models.CharField(max_length=20, verbose_name="Col1")
    col2 = models.CharField(max_length=20, verbose_name="Col2")
    col3 = models.CharField(max_length=20, verbose_name="Col3")

    def __unicode__(self):
        return str(self.location)+'-'+str(self.date)+'-'+str(self.part)

Thanks in advance,

解决方案

from django.db.models import Avg
from django.db.models import FloatField
query_set=testTable.objects.filter(location='TgR',\
          part__in=['Q', 'F'],week_number__lte=38,week_number__gte=42).\
          aggregate(col1_avg=Avg('col1'),col2_avg=Avg('col2'),col3_avg=Avg('col3'),\
          Total= (Avg('col1',output_field=FloatField())+Avg('col2', output_field=FloatField())+Avg('col3', output_field=FloatField()))
         )

from that above query set you can get the value,also refer the doc source

这篇关于如何使用带有分组,平均值和“ IN”的Django模型创建查询;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆