这有点棘手!
我有一个数据库,用于跟踪每个用户以KB为单位的每小时下载用量(每天24个条目); 看起来像这样..
user1 2013-0501 14:00:00 229
user2 2013-0501 14:00:00 103
user1 2013-0501 13:00:00 220
user2 2013-0501 13:00:00 103
现在我需要每天每个用户的平均使用量
为此创建查询集的任何方法?
我想这样做..(但不能执行)
为每个用户(捆绑)或获取当天的条目并平均它们.. 但这就是我的全部!
myValue = Members.objects.order_by('-time')
myValue = myValue.filter(user='user1')
myValue = myValue.annotate(dcount=Count('timestamp'))
如何获取“myValue.annotate(dcount = Count('timestamp__day'))的计数或更好的列表” 并得到该捆绑的平均值..
myAvg = myValue.aggregate(Avg('usage'))
感谢您的帮助,请告诉我这是否令人困惑!
答案 0 :(得分:0)
我想说这是一个典型的查询案例,它不能完全映射到您的模型。 结果是类型(user,date,avg_usage),对于类型的固定用户(date,avg_usage)。因此,它不能很好地映射到单个用户对象,也不能映射到单个user_usage条目。这就是为什么内置聚合的ORM不会让你走得太远。(AFAIK)
由于这是一个非常简单的SQL查询,我将使用原始SQL路由(https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly):
假设date(timestamp)是将时间戳转换为日期的SQL操作(取决于数据库),user_usage是表,这些是查询:
为一个用户提供此功能:
select date(timestamp) as date, avg(usage)
from user_usage where user_id = %s
group by date(timestamp)
并立即为所有用户提供此功能:
select user_id, date(timestamp) as date, avg(usage)
from user_usage
group by user_id,date(timestamp)