Представьте себе игру в угадывание чисел, в которой один человек думает о числе, а другой должен его угадать.Игра заканчивается, если угадано правильное число.
Модели могут выглядеть следующим образом
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
Я думал об аннотированиианнотации, но это кажется невозможным.Есть идеи?