2017-09-28 10 views
1

私は私のテーブルからいくつかの情報を取得しようとしています。合計料金、2つの日付間の合計旅行など。ここに私のクエリはDjango ORMグループIDによって

start_date = Utils.subtract_day(datetime.datetime.today(), 30) 
end_date = datetime.datetime.today() 
trips = TbPastTrips.objects.filter(identity=identity, creation_time__range=(start_date, end_date), 
            status=TripStatus.PAYMENT_COMPLETED)\ 
    .annotate(total_price__=Sum('price'), total_tip=Sum('tip_amount'), 
       total_additional_fees=Sum('additional_fees'), total_trip=Count('price')) \ 
    .values('total_price__', 'total_tip', 'total_additional_fees', 'total_trip') 

print(trips.query) 

ですこれは私がクエリセットの上から期待した生のSQLクエリです:

SELECT SUM(`tb_past_trips`.`PRICE`) AS `total_price__`, SUM(`tb_past_trips`.`TIP_AMOUNT`) AS `total_tip`, SUM(`tb_past_trips`.`ADDITIONAL_FEES`) AS `total_additional_fees`, COUNT(`tb_past_trips`.`PRICE`) AS `total_trip` FROM `tb_past_trips` WHERE (`tb_past_trips`.`IDENTITY` = 44444444444 AND `tb_past_trips`.`CREATION_TIME` BETWEEN '2017-08-29 10:36:19.446371' AND '2017-09-28 10:36:19.446405' AND `tb_past_trips`.`STATUS` = 4) 

しかし、それは余分なクエリの下に追加されます。

GROUP tb_past_trips BY。 ID ORDER BY NULL

とクエリの最後。しかし、私はそれをグループ化したくありません。

私がやっている間違ったことは何ですか?

Djangoのバージョン:(1、11、5、 'final' は、0)

のPython 3.6.2

追加モデル:

class TbPastTrips(models.Model): 
    id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase. 
    transaction_id = models.CharField(db_column='TRANSACTION_ID', max_length=50, blank=True, null=True) # Field name made lowercase. 
    identity = models.CharField(db_column='TAXI', max_length=20) # Field name made lowercase. 
    price = models.IntegerField(db_column='PRICE', blank=True, null=True) # Field name made lowercase. 
    tip_amount = models.IntegerField(db_column='TIP_AMOUNT', blank=True, null=True) # Field name made lowercase. 
    additional_fees = models.IntegerField(db_column='ADDITIONAL_FEES', blank=True, null=True) # Field name made lowercase. 
    total_price = models.IntegerField(db_column='TOTAL_PRICE', blank=True, null=True) # Field name made lowercase. 
    creation_time = models.DateTimeField(db_column='CREATION_TIME') # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'tb_past_trips' 
+0

あなたのモデルは何ですか?どうやってそれを管理しましたか?それはデータベースビューですか? –

+0

私はmissusageを見つけました、私は集計を使用する必要があります注釈しないでください。 https://stackoverflow.com/questions/7981837/difference-between-djangos-annotate-and-aggregate-methods – RockOnGom

+0

助けてくれれば助かります。あなたの質問に答えを加えることができれば、他の人を助けることができます。 –

答えて

1

あなただけ.order_by()によって追加の空の順序を必要とします 詳細default-ordering-or-order-by

+0

私はすでにそれを試みたが、動作しませんでした。 – RockOnGom

+0

あなたのモデルを追加してください、私はそれを試してみてください –

1

使用集約

、注釈を付けません

per-objectサマリーは、annotate()句を使用して生成できます。 annotate()句を指定すると、QuerySet の各オブジェクトに、指定された値の注釈が付けられます。

私たちが必要なの集約

は、このクエリセットに属するオブジェクト 上の要約値を計算する方法です。これは、クエリセットにaggregate() 句を追加することによって行われます。

関連する問題