如何编写这个SQL?

如何编写这个SQL?,sql,django,Sql,Django,我想计算一个问题在QA系统中的受欢迎程度,一个问题有多个投票,多个答案,多个评论,每个答案有多个投票和多个评论。人气应该是这样的: popularity=count(Question.Votes)+count(Question.Answers)+count(Question.Comments)+(for an_answer in Question.Answers:sum+=count(an_answer.Votes)+count(an_answer.Comments)) 结果应该是这样的:SE

我想计算一个问题在QA系统中的受欢迎程度,一个问题有多个投票,多个答案,多个评论,每个答案有多个投票和多个评论。人气应该是这样的:

popularity=count(Question.Votes)+count(Question.Answers)+count(Question.Comments)+(for an_answer in Question.Answers:sum+=count(an_answer.Votes)+count(an_answer.Comments))
结果应该是这样的:
SELECT*,按流行程度按问题顺序排列流行程度


另外,我在django做这件事,想知道除了使用extra()之外,还有没有更优雅的方法来做这件事?

我认为计算每次点击的受欢迎程度是非常糟糕的。插入一个具有流行性的列,并在数据库更新时重新计算。请提供一个示例记录集,以便我们了解架构和数据。我同意Erik的观点。如果系统大部分是只读的,他的建议就更为重要,这意味着有人查看问题的次数远大于有人回答/投票/评论问题的次数。这听起来非常合理!我认为最好为问题增加一些额外的栏目:投票数、评论数和受欢迎程度(它们都在不同的地方使用),并在相应的数据发生变化时进行计算。只是想知道它是否违反了某些规则,因为数据是“重复的”并且具有多个依赖关系?有一些查询QA系统的好例子。呵呵。