2012-06-17 46 views
2

我有一個包含問題的表格,其中每一行都是一個問題,所有問題都有一個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在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殼):

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

這版畫SQL和Bohemians完全一樣。

回答

5

一個直接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; 
+0

非常感謝!我幾乎感到尷尬,它可以很容易地完成,但我非常感謝幫助 - 我被卡住了。 – Eiriks

+0

接受! (我正在弄清楚如何將其轉換成django orm代碼,如果我能弄明白並添加它,那麼問題就會完整。) – Eiriks