5

質問のあるテーブルがあります。各行は質問であり、すべての質問にはasked_byフィールドとanswer_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 で非常に簡単であることが判明したため、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)

これは、Bohemians とまったく同じことを行う SQL を出力します。

4

1 に答える 1

16

簡単な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;
于 2012-06-17T14:32:04.277 に答える