Как сделать условный подсчет - PullRequest
1 голос
/ 22 июня 2019

У меня есть таблица, в которой запрос работает нормально

SELECT answers.answer,answers.id,answers.user_id,COUNT(vote.vote)
              FROM user_answers AS answers
              LEFT JOIN user_answer_vote AS vote ON answers.id =vote.answer_id
              WHERE answers.question_id = $question_id
              GROUP BY answers.id ORDER BY  COUNT(vote.vote) DESC

Запрос возвращается, как и ожидалось, но проблема в том, что столбец voice.vote имеет значение -eve и + eve. Я хочу, чтобы он учитывал только значения + eve. Как я могу это сделать?

1 Ответ

2 голосов
/ 22 июня 2019

Использование case..when оператора

COUNT(case when vote.vote='+eve' then 1 end)

в запросе

SELECT a.answer,a.id,a.user_id, 
       COUNT(case when v.vote='+eve' then 1 end)  
    -- SUM(v.vote='+eve') might be another alternative for the above COUNT
  FROM user_answers AS a
  LEFT JOIN user_answer_vote AS v
    ON a.id =v.answer_id
 WHERE a.question_id = $question_id
 GROUP BY a.id 
 ORDER BY COUNT(case when vote.vote='+eve' then 1 end) DESC
       -- SUM(v.vote='+eve') might be another alternative for the above COUNT

Редактировать (из-за вашего комментария):

SELECT a.answer,a.id,a.user_id, 
       SUM(case when v.vote='+eve' then 1 else -1 end )
  FROM user_answers AS a
  LEFT JOIN user_answer_vote AS v
    ON a.id =v.answer_id
 WHERE a.question_id = $question_id
 GROUP BY a.id 
 ORDER BY SUM(case when v.vote='+eve' then 1 else -1 end ) DESC

Демонстрация для агрегаций выше

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