gpt4 book ai didi

python - 有什么方法可以在 Django 中对聚合进行分组吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:17 24 4
gpt4 key购买 nike

我们目前使用 Django 1.8 和 Postgres。

我有一个想要执行的聚合,但我希望聚合按月分组。这在 SQL 中是微不足道的,但我似乎无法找到任何使用 Django ORM 来实现它的方法。

下面是我正在执行的 SQL 查询的示例,它提供了所需的结果 ( SQL Fiddle ):

SELECT 
EXTRACT(month from date) as month,
EXTRACT(year from date) as year,
SUM(total) as total
FROM transaction
GROUP BY year, month ORDER BY year, month;

这是我翻译成 Django 的一个示例(这个示例使用 this answer 中的 Month 类,但我尝试了几种变体):

results = Transactions.all().annotate(month=Month('date')).aggregate(total=Sum('total', output_field=DecimalField()))

这里正在进行一些额外的聚合,但为了清楚起见,我将其删除。我不在乎 Django 输出最终会是什么样子,只要它按月分组即可。

最佳答案

试试这个

results=Transactions.objects.annotate(month=Month('date'),year = Year('date')).values('month','year').annotate(total=Sum('total', output_field=DecimalField())).order_by('year','month')


您可以通过以下方式查看相应 ORM 的原始 sql 查询:

print(results.query)


它会提供如下结果

[
{'month': 1, 'year': 2017, 'total': 139522},
{'month': 2, 'year': 2017, 'total': 560086},
{'month': 3, 'year': 2017, 'total': 1292125},
{'month': 1, 'year': 2018, 'total': 77058413},
{'month': 2, 'year': 2018, 'total': 99205278},
]


这是您要找的吗?

关于python - 有什么方法可以在 Django 中对聚合进行分组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com