django按日期分组,和值包括和零

kqqjbcuj  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(306)

django group by dates和sum值包括和零

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

我想把一个月中每一天的所有值相加。包括总和为零的天数。
为什么sum同时对datetime和data进行操作?
我试着在django doc上的任何地方,在stack上,但是没有找到与我的问题相关的东西。有什么建议吗?
有一个帖子与此类似,但它不显示日期值和和值之和为零的django group

+---------------------+-----------+
| 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)
t3psigkw

t3psigkw1#

正如我所理解的,问题并不是“sum对datetime和data都起作用”。从表中的行中获取日期,如果没有特定日期的行,则显然无法获得该日期和0作为数据总和的结果(但如果有行,但它们的数据总和为0,则可以)。因为你是在聚合行,而不是“月”之类的。我认为,实际上没有办法用sql来描述这一点,用django绝对不行。在处理这样一个任务时,我刚刚在python中用0手动填充了缺失的日期,方法是迭代每个月的每一天并检查它是否在结果集中https://github.com/sdispater/pendulum,它对此类任务具有很好的范围功能https://pendulum.eustace.io/docs/#range. 但如果您只需要从第一天到最后一天,手动构建日期可能更容易)。

相关问题