で私はこのようなDjangoのモデルがあります。私はリストにユーザー名を持っており、平均計算に使用する月と年ごとにグループ化したいと考えています。私のクエリは次のようなものです:Djangoのクエリグループは、月と年
私がこのクエリを実行したとき、私が望むと思った結果が得られました。それは私が得たもののサンプルです:
trx2 = EVENT.objects.filter(user__in=ru, pay_time__year=2016, pay_time__month=4)
そして、私は結果60990件のレコードを得た:
<QuerySet [{'y': 2016, 'c': 61098, 'm': 4}, {'y': 2016, 'c': 104632, 'm': 5}]>
が、私はこのクエリを実行しましたので、確認したかったです。
これは、最初のクエリから得た結果が正しくないことを意味します。私はループで2番目のクエリを使用して私が望むものを得ることができますが、これはGROUP BYを使用して1つのクエリを実行するのに比べて非常に遅くなることがわかります。
おかげで、
編集:ここでは
がprint trx.query
の出力です:
SELECT
EXTRACT(YEAR from `events_event`.`pay_time`) AS `y`,
EXTRACT(MONTH from `events_event`.`pay_time`) AS `m`,
COUNT(`events_event`.`id`) AS `c`
FROM `events_event`
WHERE
`events_event`.`user` IN ('user1', 'user2')
GROUP BY
EXTRACT(YEAR from `events_event`.`pay_time`),
EXTRACT(MONTH from `events_event`.`pay_time`)
ORDER BY NULL
そして、これはprint trx2.query
の出力です:
SELECT
`events_event`.`id`,
`events_event`.`user`,
`events_event`.`pay_time`,
FROM `events_event`
WHERE
(`events_event`.`user` IN ('user1', 'user2')
AND `events_event`.`pay_time` BETWEEN 2015-12-31 22:00:00 AND 2016-12-31 21:59:59.999999
AND EXTRACT(MONTH FROM CONVERT_TZ(`events_event`.`pay_time`, 'UTC', Africa/Cairo)) = 4)
を試すことができますが、あなたのモデルが –
あなたの最初のクエリに空の 'order_by'を追加してみてくださいordering''ていない最後に ')(' .order_byを追加しようとしたと同じ結果を得ました。 @BearBrown – Ahmedn1
あなたの質問に 'print trx.query'と' print trx2.query'の結果を追加できますか? –