0

アイテムを日付別にグループ化してカウントする必要があります。私は次のようにsqliteでそれを手に入れました:

Books.objects.filter(state="new").extra({"published_at": "date(published_at)"}).values("published_at").annotate(counter=Count("pk"))

ただし、sql ステートメントでの extra() の使用は、他の dbms では移植できません。たとえば、上記は mysql では機能しません。sqlite、postgresql、および mysql のクエリを実行するにはどうすればよいですか?

4

1 に答える 1

1

データベースに依存しないクエリが必要な場合は、extra() を使用しないでください。books = Books.objects.filter(state="new") .order_by('published_at', ) .values("published_at", ) .annotate(count=Count("published_at__day"))

date__day (published_at__day) へのアクセスは次のエラーで失敗します:

FieldError: フィールド 'date' での結合は許可されていません。検索タイプの「日」のつづりを間違えていませんか?

Django が月ごとのグループ化を日ごとのグループ化に注釈付けし直した場合。

Book.objects.all().extra(select={'day': 'extract( day from date )'}).values('day').annotate(num=Count('date')).order_by()

これは複数の年にまたがるため、.all() を .filter(year=some_year) に置き換えることができます。

ExtractMySQL と PostgreSQL での動作を確認しています。

于 2013-09-30T22:35:51.337 に答える