【问题标题】:Django conditional aggregationDjango 条件聚合
【发布时间】:2010-11-01 14:00:52
【问题描述】:

有谁知道我将如何通过 django ORM 生成一个有条件地聚合相关模型的查询?

例如,假设您经营一个销售商品的网站,并且您想知道过去 7 天内每位员工的销售量。在所有销售中执行此操作很简单:

q = Employee.objects.filter(type='salesman').annotate(total_sales = models.Sum('sale__total'))

假设 Employee 和 Sale 模型之间存在多对多关系。好的,但是现在我将如何将其限制为过去 7 天(或任何任意时间范围)的所有销售?有人知道吗?

【问题讨论】:

  • 您询问的是 SELECT SUM(SALES) GROUP BY EMPLOYEE 查询吗?

标签: python database django conditional aggregation


【解决方案1】:

好吧,我想我没想到这么远。我没有意识到过滤器使用左连接处理事情(虽然考虑了一下,它会如何映射到数据库?),所以显而易见的答案是:

Employee.objects.filter(type='salesman').filter(sale__timestamp__gte = start_date)\
        .exclude(sale__timestamp__gte = end_date).annotate(...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 2020-05-05
    • 2020-06-08
    • 1970-01-01
    • 2017-06-26
    • 2020-02-27
    • 2021-08-24
    • 2019-08-13
    相关资源
    最近更新 更多