关于mysql:SQL命令将0视为负数并将1视为正数

SQL command to treat 0 as negative and 1 as positive

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

有一个名为VOTE的字段,其中存储赞成票或反对票,然后存储一堆有关投票的元数据。

此表中有一个称为UP的列,它是BOOL,代表"这是Upvote吗?"如果条目是Upvote,则值为1;如果条目是Downvote,则值为0。

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

在1个单一命令中是否有很好的MYSQL方式来做到这一点?使用"是否支持"来设计表格也许是非常糟糕的事情。布尔值,也许整个表都必须重新设计?


只需使用case语句:

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

我的意思是,您可能会喜欢上它,并执行以下操作:

1
select sum(2 * `up` - 1)

但这是难以理解的。

甚至:

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


1
2
3
4
5
6
7
8
9
SELECT
(
SELECT COUNT(Up) AS VoteCount
FROM votetable WHERE VOTE=1
)-
(
SELECT COUNT(Up) AS VoteCount
FROM votetable WHERE VOTE=0
)