Как написать этот SQL?

#sql #django

#sql #django

Вопрос:

Я хочу рассчитать популярность вопроса в системе контроля качества, один вопрос имеет несколько голосов, несколько ответов, несколько комментариев, и каждый ответ имеет несколько голосов и несколько комментариев. Популярность должна быть такой:

 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 *, popularity FROM Question ORDER BY popularity .

Кроме того, я делаю это в django, задаваясь вопросом, есть ли более элегантный способ сделать это, кроме использования extra() ?

Комментарии:

1. Я думаю, что очень неэффективно вычислять популярность с каждым кликом. Вставьте столбец с популярностью и пересчитайте его при обновлениях базы данных.

2. Пожалуйста, предоставьте пример набора записей, чтобы мы понимали схему и данные.

3. Я согласен с Эриком. Его совет еще более важен, если система в основном доступна только для чтения, что означает, что количество раз, когда кто-то просматривает вопрос, намного больше, чем количество раз, когда кто-то ответит / проголосует / прокомментирует вопрос.

4. Это звучит очень разумно! Я думаю, что, вероятно, лучше добавить несколько дополнительных столбцов для вопроса: Number_of_Votes, Number_of_Comments и Популярность (все они используются в разных местах) и вычислять их при изменении соответствующих данных. Просто интересно, нарушает ли это определенные правила, поскольку данные «дублируются» и имеют множественную зависимость?

5. data.stackexchange.com имеет несколько хороших примеров запросов для системы контроля качества. Хех.