<p>我有一个django应用程序正在做日志记录。我的模型是这样的:</p>
<pre><code>class MessageLog(models.Model):
logtime = models.DateTimeField(auto_now_add=True)
user = models.CharField(max_length=50)
message = models.CharField(max_length=512)
</code></pre>
<p>我们要做的是获取一周中每天记录的平均消息数,这样我就可以看到哪一天是最活跃的。我已经设法编写了一个查询,该查询每天提取邮件总数,即:</p>
<pre><code>for i in range(1, 8):
MessageLog.objects.filter(logtime__week_day=i).count()
</code></pre>
<p>但我在计算查询中的平均值时遇到问题。我现在拥有的是:</p>
<pre><code>for i in range(1, 8):
MessageLog.objects.filter(logtime__week_day=i).annotate(num_msgs=Count('id')).aggregate(Avg('num_msgs'))
</code></pre>
<p>但由于某些原因,它每天返回1.0。我查看了它生成的SQL,它是:</p>
<pre><code>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
</code></pre>
<p>我想问题可能是来自于按身份分组,但我不太确定。有人有什么想法或建议吗?提前谢谢!</p>