【问题标题】:django count distinct maxdjango count distinct max
【发布时间】:2023-03-29 02:04:01
【问题描述】:

很抱歉,我无法提供我的整个代码作为我的工作,我目前正在使用我的个人笔记本电脑。

我是 django 新手,需要帮助来解决这个问题

我需要得到最大不同计数的结果

所以, 我有内容和评论表 内容有 content_id 和 title 评论有comment_id,comment,content_id(FK)

用户每次评论内容评论表都会记录这些。 例如。 评论

comment_id    comment    content_id
1             blah blah  1
2             blah blah  1
3             blah blah  2
4             blah blah  3

我需要获取 cmet 数量最多的内容标题。 所以对于上面的例子, content_id 1 具有最多的 cmets,因为它有 2 个 cmets。 我需要从表 Content 中获取 content_id 1 的标题。

在 SQL 中,我可以使用类似的东西(不完全是,只是为了让您了解我想要得到什么)

SELECT DISTINCT(content.content_id) AS no_of_comments,
       title
FROM content INNER JOIN comment
ON content.content_id = comment.content_id
GROUP BY content.content_id
ORDER BY no_of_comments DESC

那么我可以得到

no_of_comments    title
2                 Title Of Content One
1                 Title Of Content Two
1                 Title Of Content Three

然后我只需要返回“内容标题”作为我的代码的结果

我知道如何从 SQL 中获取这些,从上面的代码开始,但不知道如何使用 django 做到这一点

如果有的话,我想我可能需要在 django 中使用游标, 但是当我开始加入这两个表时,我不知道该怎么做。 我正在使用 django 1.6

请帮帮我。

【问题讨论】:

  • 谢谢,@Anentropic 这个页面帮助很大,但仍有问题。 c = Comment.objects.values('content_id').annotate(count=Count('conent_id')).order_by('-count') 然后c[0].count 这会得到最大计数吗?如果是这样,那么我怎样才能获得标题?或者至少是 content_id?
  • 从内容模型的角度查询会更有意义:Content.objects.annotate(count=Count('comment__id')).order_by('-count')
  • @Anentropic 啊,明白了!谢谢。

标签: python django postgresql psql


【解决方案1】:

我认为你可以通过这个查询实现你想要的:

Content.objects.annotate(count=Count('comment__id')).order_by('-count')

不需要GROUP BY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 2013-01-28
    • 2016-04-04
    • 2013-05-12
    • 2012-12-12
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多