2

このモデルとデータを考慮すると:

Ad_id + Date = 主キー

    Ad_id  date   clicks
------------------------------
      3     8/10/12   124
      3     7/10/12   433
      3     6/10/12    99
      4     8/10/12    23
      4     7/10/12    80

すべてのクリックの合計を返すために、ad_id でグループ化しようとしています。

SQL用語で:

select Ad_id, date, sum(clicks) from ads group by Ad_id

問題は、Django がモデル内の各フィールドに対して自動的に group by を実行するため、group by が実際には機能しないことです (各行が一意であるため)。

私がすでにチェックした解決策:


次のようなことが可能であることはわかっています。

Ad.objects.values('ad_id').annotate(clicks_sum=Sum('clicks'))

しかし、Ad Model を返すのではなく、辞書を返すので良くありません。

チェーンできないため、生のSQLも使用できません

また、私は設定しようとしました

MyQuerySet.group_by = ['ad_id']

あまりにも動作していません..

したがって、必要なフィールドだけでグループ化する必要があり、その結果が広告モデルになります。

4

1 に答える 1

2

を使用して生の SQL クエリを実行できManager.raw()ます。この場合は次のようになります。

Ad.objects.raw('select Ad_id, date, sum(clicks) from ads group by Ad_id')

このメソッド メソッドは、未加工の SQL クエリを取得して実行し、RawQuerySetインスタンスを返します。このインスタンスは、オブジェクト インスタンスを提供するためにRawQuerySet、通常と同じように繰り返すことができます。QuerySet

于 2012-11-08T17:14:02.527 に答える