1

这有点棘手!

我有一个数据库,可以跟踪每个用户每小时下载 KB 的使用情况(每天 24 个条目);看起来像这样。。

用户时间戳使用

用户 1 2013-0501 14:00:00 229

用户2 2013-0501 14:00:00 103

用户 1 2013-0501 13:00:00 220

用户2 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'))

感谢您的帮助,如果这令人困惑,请告诉我!

4

1 回答 1

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)
于 2013-05-02T11:40:26.333 回答