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】:
使用 Cast
将 datetime
转换为 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 中将两列与 group by 相乘和求和