我正在与DB合作,其中有人这样做:
有一个名为VOTE的字段存储upvote或downvote,然后是一堆关于投票的元数据。
这个表中有一个名为UP的列,它是BOOL,表示“这是一个Upvote吗?”如果条目是Upvote,则其值为1,但如果条目为Downvote,则其值为0.
因此,当我在此表上运行查询时,我想创建一个总和,将1视为+1,将0视为-1,因此,如果每个中有5个,则最终为0。 / p>
在单个命令中有没有很好的MYSQL方法呢?也许用这个“IS IT UPVOTE?”来设计表格是非常糟糕的。布尔值,也许整个表格必须重新设计?
答案 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
)