1

我有一个包含用户 ID 及其分数的表。

eg. userid rating
    123    1
    123    2
    456    1
    789    5
    123    1

我想要实现的是这样的汇总表:

rating 1 : 32 ratings by 20 ppl       
       2 : 37 ratings by 15 ppl 
       etc.. 

ppl 的数量应该是给出该评级的不同用户。

我已经了解了 Django 模型聚合方法,并且知道如何使用 count 等。但我无法想出能够实现这一目标的方法。

当然,我可以检索整个集合并在 python 中使用 for 循环来计数,但这不会有效。

谢谢你的帮助。

4

2 回答 2

1

您正在寻找的 sql 是这样的:

SELECT rating, COUNT(rating) AS rc, COUNT(DISTINCT userid) FROM rating_tbl GROUP BY rating ORDER BY rc DESC;

您还没有提供模型,实际上在 Django ORM、IMO 中表示 SQL 并不容易。最简单的方法是直接写,参考文档

于 2012-07-01T08:23:23.313 回答
0

也许是这样的:

MyTable.objects.annotate(Count('rating')).order_by('rating_count').annotate(Count('user_id'))
于 2012-07-01T06:59:59.393 回答