【问题标题】:Can I do custom complicated group by in a Django QuerySet?我可以在 Django QuerySet 中进行自定义复杂分组吗?
【发布时间】:2011-01-18 09:46:50
【问题描述】:

我需要对按日期和月份分组的某个列进行总和。在 SQL (postgres) 中,它看起来像这样:

select sum(amount) from somewhere group by extract(year from date), extract(month from date)

这可以表示为 Django QuerySet 吗?在我看来它不能,但我真的不想诉诸普通的旧 SQL。欢迎任何其他想法。

似乎可以使用queryset.query.group_by,但我没有任何运气 - 欢迎提供一个可行的示例。

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    您可以使用extra 方法在进行聚合之前添加年份和日期值。

    Somewhere.objects.extra(select={'year': 'EXTRACT(year FROM date)',
                                    'month': 'EXTRACT(month FROM date)'}
                           ).values_list('year', 'month').annotate(Sum('amount'))
    

    【讨论】:

    • 谢谢,没想到是这样的!
    • 请注意,对于 PostgreSQL 用户来说,这样做更有效:.extra(select={'date':"date_trunc('month', date)"})...。它为您提供每个月的第一天的日期。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多