Сравните и посчитайте значения в строках mysql

0
upVote   DownVote
|true   | 0
|true   | 0
|0      | true
|true   | 0
|true   | 0
|0      | true

У меня есть столбцы, подобные этому выше в моей таблице sql. Я хочу подсчитать общее количество upVotes - Downvotes точно так же, как stackOverflow. Но по какой-то причине мне сложно работать с синтаксисом sql.

SELECT COALESCE(sum(CASE WHEN upvote THEN 1 ELSE 0 END),0) from Ratings WHERE TopicID = :topicsID

Я видел пример sql-запроса выше, но не уверен, что я направляюсь в правильном направлении. Приветствуется

  • 0
    В чем проблема с вашим запросом? Вы на правильном пути, но явно только подсчитывает голоса.
  • 1
    Можете ли вы когда-нибудь иметь true | true или false | false ?
Показать ещё 9 комментариев
Теги:

2 ответа

3
Лучший ответ

Думаю, вам нужно вычесть sum(upvote) и sum(DownVote)

SELECT sum(upvote) - sum(DownVote)
from Ratings 
WHERE TopicID = :topicsID

Скрипт: http://sqlfiddle.com/#!9/b1644c/8

Я думаю, что один vote столбец с логическим значением достаточно.

Поскольку True может означать upvote, False может означать DownVote

CREATE TABLE Ratings
(
    Vote BOOL
);
INSERT INTO Ratings VALUES 
(TRUE),
(TRUE),
(0),
(0),
(TRUE),
(TRUE),
(0);

SELECT sum(CASE WHEN Vote THEN 1 ELSE 0 END) - 
   sum(CASE WHEN Vote THEN 0 ELSE 1 END) as vote
from Ratings 
WHERE TopicID = :topicsID

Сценарий: http://sqlfiddle.com/#!9/727c2b/3

  • 1
    Я отредактировал это, чтобы удалить цитаты (вместе с другими вашими ответами, содержащими их). Они имеют специальное назначение и не должны использоваться в качестве личных предпочтений форматирования. Этот вопрос обсуждался на мета несколько раз. Итак, можете ли вы прекратить использовать их?
  • 0
    Хорошо, я понял. Спасибо за напоминание.
Показать ещё 1 комментарий
0
select COUNT(*) from ratings WHERE upvote=true AND TopicID = :topicsID ?
  • 0
    но как бы я сравнил и уменьшил счет, когда есть downVote?
  • 0
    не знал, к чему вы стремитесь, но вы можете выполнить тот же запрос для false и затем вычесть true-false

Ещё вопросы

Сообщество Overcoder
Наверх
Меню