Django Average 和 Group By 中的 MYSQL 等效查询

Posted

技术标签:

【中文标题】Django Average 和 Group By 中的 MYSQL 等效查询【英文标题】:MYSQL equivalent query in Django Average and Group By 【发布时间】:2021-03-27 04:27:26 【问题描述】:

请帮助我在 Django 中使用 ORM 编写相同的查询

SELECT DATE(`created_at`) DateOnly, 
AVG(`amout`) AS val_1  
FROM `account`  
GROUP BY DateOnly

【问题讨论】:

猜测:for p in account.objects.raw('SELECT DATE(created_at) DateOnly, AVG(amout) AS val_1 FROM account GROUP BY DateOnly'): ... print(p) - 注意amout 不是一个词 @Strawberry 我正在寻找 ORM 而不是原始查询 【参考方案1】:

使用 Castdatetime 转换为 date,然后使用 values 进行聚合。 ORM中的一个常见习语.values().annotate(..)用于执行group by操作。

from django.db.models.functions import Cast
from django.db.models import DateField

Account.objects.annotate(
   DateOnly = Cast('created_at', output_field=DateField()),
).values('DateOnly').annotate(val_1 = Avg('amout'))

【讨论】:

以上是关于Django Average 和 Group By 中的 MYSQL 等效查询的主要内容,如果未能解决你的问题,请参考以下文章

Django- Group by 和 Count by unique together

Django 相当于 COUNT 和 GROUP BY

如何在表格中模拟SQL group by?

如何在 django 中将两列与 group by 相乘和求和

在 Django 模型上执行 INNER JOIN、GROUP BY 和 COUNT

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