我有一个 django 应用程序正在做一些日志记录。我的模型如下所示:
class MessageLog(models.Model):
logtime = models.DateTimeField(auto_now_add=True)
user = models.CharField(max_length=50)
message = models.CharField(max_length=512)
想要做的是获取一周中每天记录的平均消息数,以便我可以看到哪些日子最活跃。我设法编写了一个查询,该查询每天提取消息总数,即:
for i in range(1, 8):
MessageLog.objects.filter(logtime__week_day=i).count()
但是我在计算查询中的平均值时遇到了麻烦。我现在拥有的是:
for i in range(1, 8):
MessageLog.objects.filter(logtime__week_day=i).annotate(num_msgs=Count('id')).aggregate(Avg('num_msgs'))
出于某种原因,这每天都会返回 1.0。我查看了它正在生成的 SQL,它是:
SELECT AVG(num_msgs) FROM (
SELECT
`myapp_messagelog`.`id` AS `id`, `myapp_messagelog`.`logtime` AS `logtime`,
`myapp_messagelog`.`user` AS `user`, `myapp_messagelog`.`message` AS `message`,
COUNT(`myapp_messagelog`.`id`) AS `num_msgs`
FROM `myapp_messagelog`
WHERE DAYOFWEEK(`myapp_messagelog`.`logtime`) = 1
GROUP BY `myapp_messagelog`.`id` ORDER BY NULL
) subquery
我认为问题可能来自 GROUP BY id,但我不太确定。有人有什么想法或建议吗?提前致谢!