选择两列的组合,并计算此组合的出现次数

时间:2012-06-17 14:28:14

标签: mysql sql django-views

我有一个有问题的表,每行都是一个问题,所有问题都有一个ask_by和answers_by字段。我想选择“askers”和“answerers”的所有独特组合,并计算这种询问/回答组合发生的次数。

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

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

E.g。 2011-2012:

AA, JD, 2
JD, AA, 1
PS:理想情况下我会为django orm写这个,但是因为我似乎无法弄清楚如何制定一个合理的谷歌搜索,找到SQL方式是我的目标。

问题解决后注意: 由于这在SQL中非常简单,因此在Djangos 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)

这会打印出与波希米亚人完全相同的SQL。

1 个答案:

答案 0 :(得分:10)

使用COUNT(*)的简单GROUP 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;