Как суммировать столбцы из двух результирующих наборов в MySQL - PullRequest
0 голосов
/ 28 января 2009

У меня есть следующая таблица:

рейтинги:

ID | post_id | rating_type

Поле rating_type имеет вид «thumb-up» или «thumb-down». Я хочу получить набор результатов, сообщающий мне, какие посты имеют самый высокий рейтинг. Следующий запрос дает мне набор результатов с количеством голосов «за» для каждого уникального post_id.

SELECT COUNT(post_id) as number_up, post_id FROM wp_sp_post_ratings WHERE rating_type = 'thumb-up' GROUP BY post_id

Это здорово! Я могу сделать то же самое для типа рейтинга вниз. Тем не менее, мне нужно получить общий рейтинг, где каждый большой палец дает посту одно очко, а каждый большой палец дает сообщению отрицательный балл. Затем мне нужно заказать это на общую сумму рейтинга. Итак, скажем, у нас есть следующее:

пост 1 имеет 3 голосов "за" и 2 голосов "за" сообщение 2 имеет 14 голосов за и 33 голосов против пост 3 имеет 4 голосов "за" и 0 голосов "за"

Я бы хотел видеть набор результатов, подобный следующему:

post_id | total_rating
3 | 4
1 | 1
2 | -19

Понятия не имею, как это сделать. Я уже 2 часа бьюсь головой о документации и Google, поэтому я надеялся, что SO может стать моим спасителем.

Ответы [ 2 ]

4 голосов
/ 28 января 2009
SELECT SUM(CASE WHEN rating_type = 'up' THEN 1 WHEN rating_type = 'down' THEN -1 END CASE)
FROM posts
GROUP BY post_id

P. S. Лучше сохранять и понижать голоса как числа (+1 и -1), а не как строки.

0 голосов
/ 28 января 2009

Первоначально, почему бы не хранить большие пальцы вверх как 1 и большие пальцы вниз как -1 непосредственно? Quassnoi был быстрее с заявлением по делу ....

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