我如何使用django orm的SQL子查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使用django orm的SQL子查询相关的知识,希望对你有一定的参考价值。

我想做这个查询用django orm获取最近的avg数据

select product_name, AVG(price) as avg_price
  from (
        select procuct_name, price, deal_date
          from deal_history
         order by deal_date desc
       ) R

所以,我试过这个问题

DealHistory.objects.all().order_by('-deal_date')
           .values('product_name').annotate(avg_price=Avg('price'))

但是这个django-orm返回SQL查询下面

select product_name, deal_date, avg(price) as avg_price
  from deal_history
 order by deal_date desc
 group by product_name, deal_date

我该怎么办?

答案

如果你想拥有所有记录的平均值,你必须使用聚合。 annotate分别为每条记录运行。

以上是关于我如何使用django orm的SQL子查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django orm 中执行子查询?

使用SQL语言了解Django ORM中的分组(group by)和聚合(aggregation)查询

如何在 django ORM 的 From 子句中编写子查询

Django - 原始 SQL 查询或 Django QuerySet ORM

Django ORM使用子查询按关键字搜索文本

Django ORM queryset object 解释(子查询和join连表查询的结果)