PostgreSQL отслеживает голоса в таблице? - PullRequest
0 голосов
/ 12 марта 2011

У меня есть таблица с простым столбцом голосования вверх / вниз, который я изначально создал как логическое значение. true - это голосование против, false - это голосование вниз. Однако я не уверен, как использовать агрегатные функции для достижения такого результата запроса. Например, 5 true строк и 2 false должны равняться +3.

Я думаю, что мне нужно изменить столбец на smallint с +1 и -1. Это правильно? Есть ли лучший способ запросить что-то вроде этого?

1 Ответ

5 голосов
/ 12 марта 2011

Нет необходимости изменять тип данных, просто используйте CASE, чтобы преобразовать его в -1 и 1, а затем суммируйте по выражению:

SELECT sum(case when vote_column then 1 else -1 end)
FROM your_table

Чтобы правильно обрабатывать значения NULL, используйте следующее

SELECT sum(case vote_column 
              when true then 1 
              when false then -1 
              else 0 
           end)
FROM your_table
...