Django按日期分组并且SUM值包括SUM零

时间:2018-07-10 21:36:03

标签: mysql django django-models

Django按日期分组并且SUM值包括SUM零

values = self.model.objects.values('datetime').annotate(data_sum=Sum('data')).filter(datetime__range=( ? ) )

我想添加一个月中每一天的所有值。包括总和为零的天。

为什么总和对日期时间和数据都起作用?

我在django doc上的所有地方都尝试过,在堆栈上,但是没有找到与我的问题相符的东西。有什么建议吗?

有一个与此类似的帖子,但是它不显示为零的日期值之和 Django group by dates and SUM values

+---------------------+-----------+
| datetime            | SUM(data) |
+---------------------+-----------+
| 2013-07-01          |       489 |
| 2013-07-02          |      2923 |
| 2013-07-03          |       984 |
| 2013-07-04          |      2795 |
| 2013-07-05          |      0    |
| 2013-07-06          |      1365 |
| 2013-07-07          |      1331 |
| 2013-07-08          |       0   |
| 2013-07-09          |       919 |
| 2013-07-10          |       722 |
| 2013-07-11          |       731 |
| 2013-07-12          |       489 |
| 2013-07-13          |      2923 |
| 2013-07-14          |       984 |
| 2013-07-15          |      2795 |
| 2013-07-16          |      0    |
| 2013-07-17          |      0    |
| 2013-07-18          |      0    |
| 2013-07-19          |      0    |
| 2013-07-20          |       919 |
| 2013-07-21          |       722 |
| 2013-07-22          |       731 |
| 2013-07-23          |      1365 |
| 2013-07-24          |      1331 |
| 2013-07-25          |       0   |
| 2013-07-26          |       919 |
| 2013-07-27          |       722 |
| 2013-07-28          |       731 |
| 2013-07-29          |      1365 |
| 2013-07-30          |      1331 |
| 2013-07-31          |       0   |
+---------------------+-----------+
11 rows in set (1.45 sec)

1 个答案:

答案 0 :(得分:1)

据我了解,问题不在于“求和对日期时间和数据都起作用”。您从表的行中获取日期,并且如果特定日期没有行,则显然不会以该日期和0作为数据总和获得结果(但是如果您有行,但是其数据总和为0-您将)。因为您正在汇总行,而不是“月”之类的东西。我认为实际上没有办法用SQL来描述这一点,绝对不是Django。当处理这样的任务时,我通过在月中的每一天进行迭代并检查它是否在结果集中来在python中手动用0填充缺失的日期。我使用了摆锤库https://github.com/sdispater/pendulum,它很好此类任务https://pendulum.eustace.io/docs/#range的范围功能。但是,如果您只需要从第一天到最后一天,手动设置日期可能会更容易。