1
1人が数字を考え、別の人がそれを推測しなければならない数の推測ゲームを想像してみてください。正しい数が推測された場合、ゲームは終了します。Djangoクエリ集約
モデルは4回を果たした後、この
class SecretNumber(models.Model):
number = models.IntegerField()
class Guess(models.Model)
secretnumber = models.Foreignkey(SecretNumber)
guess = models.IntegerField()
のように見えるかもしれませんが、データベースには、次のようになります。あなたが見ることができるように
id number
==========
1 10
2 54
3 68
4 25
id secretnumber_id guess
=============================
1 1 50
2 1 30
3 1 10
4 2 99
5 2 60
6 2 54
7 3 1
8 3 68
9 4 73
10 4 34
11 4 86
12 4 51
13 4 25
、推測は非常にラッキーだった:それは取りました彼は3,3,2,4の推測をしています。しかし、これはこの例を短くすることです。 は、今私は、次のデータを表示することができますクエリを考え出す必要があります。
Nb. guesses Count
=====================
2 1
3 2
4 1
マニュアルSQL文は次のようなものになります。私は、アノテーションに注釈を付けることについて考え
SELECT inner_count AS 'Nb. guesses', count(inner_count) AS 'Count' FROM (
SELECT secretnumber_id, count(id) AS inner_count FROM guess GROUP BY secretnumber_id
) GROUP BY inner_count
を、しかしこれは可能ではないようです。 アイデア
はい、私はDjangoを使用しており、モデルです。 あなたのクエリは、各秘密番号に対する推測の数に注釈を付けることに同意しますか?このような: ' [ { 'secretnumber__count':3 'secretnumber':1}、 { 'secretnumber__count':3 'secretnumber':2}、 { 'secretnumber__count':2 'secretnumber': 3}、 {'secretnumber__count':4、 'secretnumber':4} この結果を集計すると、1つの推測、 ...、n推測する。 – mbaechtold
ああ、申し訳ありませんが、私は質問を誤解しました。私はテストすることはできませんが、最後に2番目の集計を追加するだけです:推測=オブジェクト。値( 'secretnumber' Count( 'secretnumber__count')) – meepmeep
クエリがエラーをスローします... FieldError:キーワード 'count'をフィールドに解決できません。 – mbaechtold