2

DjangoORMだけでこのSQLクエリを使用して取得できる結果を取得できるかどうか疑問に思っています。

SELECT * FROM (SELECT DATE_FORMAT(created, "%Y") as dte, sum(1) FROM some_table GROUP BY dte) as analytics;

結果は次のとおりです。

+------+--------+
| dte  | sum(1) |
+------+--------+
| 2006 |     20 | 
| 2007 |   2230 | 
| 2008 |   4929 | 
| 2009 |   1177 | 
+------+--------+

簡略化されたモデルは次のようになります。

# some/models.py

class Table(models.Model):
   created = models.DateTimeField(default=datetime.datetime.now)

.extra(select = {})と.values()を組み合わせて、またここで説明する.query.group_byトリックを使用してさまざまな方法を試しましたが、問題に新たな目を向けていただければ幸いです。

4

2 に答える 2

3

Django 1.1 (これを投稿した時点でトランク) にはaggregatesがあり、これらを使用すると、クエリでcountsminssumsaveragesなどを実行できます。

あなたがしようとしていることは、おそらく複数のクエリセットを使用して達成されるでしょう。テーブル (生成された結果テーブルであっても) の各行は、新しいオブジェクトであると想定されていることに注意してください。合計しているものを実際に説明していないので、検討しますdollars

book_years = Books.object.all().order_by('year').distinct()

# I use a list comprehension to filter out just the years
for year in [book_year.created.year for book_year in book_years]:
    sum_for_year = Book.objects.filter(created__year=year).aggregate(Sum(sales))
于 2009-06-01T03:44:09.373 に答える
2

Django では ORM で表現できないクエリが必要な場合は、いつでも生の SQL を使用できます。

当面の目的のために、式によるグループ化 (およびグループに対して集計計算を行うこと) は、Django の現在の機能を超えていると考えています。

于 2009-06-01T03:53:40.963 に答える