SQL命令将0视为负数,将1视为正数

时间:2015-08-23 19:18:47

标签: mysql sql

我正在与DB合作,其中有人这样做:

有一个名为VOTE的字段存储upvote或downvote,然后是一堆关于投票的元数据。

这个表中有一个名为UP的列,它是BOOL,表示“这是一个Upvote吗?”如果条目是Upvote,则其值为1,但如果条目为Downvote,则其值为0.

因此,当我在此表上运行查询时,我想创建一个总和,将1视为+1,将0视为-1,因此,如果每个中有5个,则最终为0。 / p>

在单个命令中有没有很好的MYSQL方法呢?也许用这个“IS IT UPVOTE?”来设计表格是非常糟糕的。布尔值,也许整个表格必须重新设计?

2 个答案:

答案 0 :(得分:6)

只需使用case声明:

select sum(case when `up` = 1 then 1 when `up` = 0 then -1 end)

我的意思是,你可以看上去,并做这样的事情:

select sum(2 * `up` - 1)

但这是不可理喻的。

甚至:

select sum(`up` = 1) - sum(`up` = 0)

答案 1 :(得分:1)

SELECT 
(
SELECT COUNT(Up) AS VoteCount
FROM votetable WHERE VOTE=1
)-
(
SELECT COUNT(Up) AS VoteCount
FROM votetable WHERE VOTE=0
)