3

次のようなMySQLコードがあります。

SELECT 
visitor AS team,
COUNT(*) AS rg,
SUM(vscore>hscore) AS rw,
SUM(vscore<hscore) AS rl 
FROM `gamelog` WHERE status='Final' 
      AND date(start_et) BETWEEN %s AND %s GROUP BY visitor

複数のクエリを作成せずに、これをそのクエリの Django バージョンに変換しようとしています。これは可能ですか?Sum()、およびの実行方法を読みましたがCount()、私のように2つのフィールドを比較したい場合はうまくいかないようです。

これが私がこれまでに思いついた最高のものですが、うまくいきませんでした...

vrecord = GameLog.objects.filter(start_et__range=[start,end],visitor=i['id']
                                 ).aggregate(
                                             Sum('vscore'>'hscore'),
                                             Count('vscore'>'hscore'))

私も'vscore>hscore'そこで使ってみましたが、それもうまくいきませんでした。何か案は?できるだけ少ないクエリを使用する必要があります。

4

1 に答える 1

1

集計は、Django ORM の単一フィールドでのみ機能します。さまざまな集計関数のコードを調べたところ、単一フィールドの制限が組み込まれていることがわかりました。基本的に、たとえば を使用すると、Sum(field)後で記録するだけで、SQL への変換と実行のためにデータベース固有のバックエンドに渡されます。どうやら、集計と注釈は SQL で標準化されていません。

いずれにせよ、おそらく生の SQL クエリを使用する必要があります。

于 2013-04-26T12:56:20.513 に答える