1

これはちょっと難しいです!

各ユーザーのダウンロード使用量を KB 単位で 1 時間ごと (1 日あたり 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 操作であり (DB によって異なります)、user_usage がテーブルであると仮定すると、これらはクエリです。

これを 1 人のユーザーに取得するには:

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 に答える