【问题标题】:Select combination of two columns, and count occurrences of this combination选择两列的组合,并计算该组合的出现次数
【发布时间】:2012-06-17 14:28:14
【问题描述】:

我有一个问题表,其中每一行都是一个问题,所有问题都有一个 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。

【问题讨论】:

    标签: mysql sql django-views


    【解决方案1】:

    简单的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;
    

    【讨论】:

    • 非常感谢!我几乎很尴尬,它可以这么容易地完成,但我非常感谢你的帮助 - 我被卡住了。
    • 接受! (我正在研究如何将它翻译成 django orm 代码,我想如果我能弄清楚并添加它,这个问题就很完整了。)
    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多