使用django在表上创建一个简单的连接

我在django中有一个名为MainData的数据模型,它是在名为“my_data”的表上创建的。 我想通过django API在这个表的顶部进行简单的计算。查询如下:
select main.id,                 
       sum(main.num - secondary.num) as result

from (select * from my_data 
      where some_value > 10) as main,

      my_data as secondary

where 
      main.id != secondary.id and
      main.a  > secondary.a
group by main.id
MainData模型具有所有相关字段(num,id,a和some_value)。 如何通过django实现此查询? (我试图避免使用直接SQL) 谢谢您的帮助     
已邀请:
试试这个问题,看起来很相似: Django相当于count和group by     
这是一个艰难的。 Django并没有真正提供一种简单的方法来连接表,而不需要使用SQL。这是我可以在不使用SQL的情况下提出的最好的方法。
results
变量中返回的结果等同于您提供的SQL查询所得到的结果;但是,执行效率稍差。
from django.db.models import Sum, Count
from your_app.models import MyData
results = []
for m in MyData.objects.filter(some_value__gt=10):
    result = MyData.objects.filter(a__lt=m.a).aggregate(
        count=Count('num'), sum=Sum('num'))
    if result['count']:
        results.append({
            'id': m.id,
            'result': result['count'] * m.num - result['sum']})
print results
你还应该看看Django为
QuerySets
提供的
extra()
raw()
方法,它们可以让你在保持Djangoesque的同时高效地进行诸如你的复杂查询。     

要回复问题请先登录注册