django queryset 获取组的平均值
Posted
技术标签:
【中文标题】django queryset 获取组的平均值【英文标题】:django queryset to get average of a group 【发布时间】:2013-04-26 01:18:00 【问题描述】:这有点棘手!
我有一个数据库,可以每小时(每天 24 个条目)跟踪每个用户的下载使用情况(以 KB 为单位); 看起来像这样..
用户时间戳使用
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'))
如何获得 Count 或更好的“myValue.annotate(dcount=Count('timestamp__day'))”列表 并获得该捆绑包的平均值..
myAvg = myValue.aggregate(Avg('usage'))
感谢您的帮助,如果这令人困惑,请告诉我!
【问题讨论】:
【参考方案1】:我会说这是一个典型的查询不完全映射到您的模型的案例。 结果的类型为 (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)
【讨论】:
以上是关于django queryset 获取组的平均值的主要内容,如果未能解决你的问题,请参考以下文章
Pandas Dataframe:获取组内每个子组的第一行的平均值