5

我有一个问题表,其中每一行都是一个问题,所有问题都有一个 ask_by 和 answers_by 字段。我想选择“提问者”和“回答者”的所有独特组合,并计算这种提问/回答组合发生了多少次。

question_tbl:

id      | asked_by | answered_by | session
--------+----------+-------------+---------
1       | AA       | JD          | 2011-2012
2       | JD       | AA          | 2011-2012
9       | AA       | JD          | 2011-2012
12      | AA       | JD          | 2009-2010

我想在会话中返回唯一组合,以及该组合的计数。

例如 2011-2012 年:

AA, JD, 2
JD, AA, 1

PS:理想情况下,我会为 django orm 编写此代码,但由于我什至无法弄清楚如何为此制定合理的 google 搜索,因此找到 SQL 方式是我的目标。

问题解决后的注意事项: 因为这在 SQL 中很容易,所以在 Django 的 ORM 中也很容易。我把它留在这里供以后记录:

from django.db.models import Count
from myproject.models import Questions

Questions.objects.filter(sesjonid='2011-2012').values('sporsmal_til', 'sporsmal_fra').annotate(count=Count('besvart_av'))

通过测试它在 SQL 中的外观,在我看来是正确的(在 ./manage.py shell 中):

print str(Questions.objects.filter(sesjonid='2011-2012').values('sporsmal_til', 'sporsmal_fra').annotate(count=Count('sporsmal_til')).query)

这将打印出与 Bohemians 完全相同的 SQL。

4

1 回答 1

16

一个直截了当COUNT(*)的 aGROUP BY会做到这一点:

select asked_by, answered_by, count(*)
from question_tbl
where session = '2011-2012'
group by 1, 2;

如果您希望查询返回所有会话的数据,请使用:

select session, asked_by, answered_by, count(*)
from question_tbl
group by 1, 2, 3;
于 2012-06-17T14:32:04.277 回答