PostgreSQL跟踪表中的投票?

Xeo*_*oss 0 postgresql vote

我有一个表格,上面有一个简单的上/下投票列,我最初创建的是一个布尔值.true是一个投票,false是一个投票下来.但是,我不确定如何使用聚合函数来实现这种查询结果.例如,5 true行和2 false应该等于+3的投票.

我想我需要将列更改为带有+1和-1的smallint.它是否正确?有没有更好的方法来查询这样的东西?

a_h*_*ame 5

无需更改数据类型,只需使用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

  • 或者包含空值:`sum(case vote_column at 1然后1表示0表示-1表示其他0结束)` (2认同)