想象一下一个数字猜谜游戏,其中一个人想到一个数字而另一个人必须猜测它。如果猜到正确的数字,游戏就结束了。
模型可能如下所示
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
我考虑过注释注释,但这似乎不可能。 有什么想法吗?
答案 0 :(得分:0)
如果你正在使用django(即模型而不是类),你想使用QuerySet aggregate functions
e.g。
from django.db.models import Count
guesses = Guess.objects.values('secretnumber').annotate(Count('secretnumber'))
这将为您提供一个包含对象列表的查询集,这些对象具有秘密编号和计数值。