比较和计算mysql行中的值

时间:2018-04-09 15:12:29

标签: php mysql sql

upVote   DownVote
|true   | 0
|true   | 0
|0      | true
|true   | 0
|true   | 0
|0      | true

我的sql表中有上面这样的列。我想计算upVotes的总数 - Downvotes就像stackOverflow一样。但由于某种原因,我很难使用sql语法。

SELECT COALESCE(sum(CASE WHEN upvote THEN 1 ELSE 0 END),0) from Ratings WHERE TopicID = :topicsID

我在某处看到了上面的sql查询示例,但不确定我是朝着正确的方向前进。感谢帮助

2 个答案:

答案 0 :(得分:3)

我猜您需要在sum(upvote)sum(DownVote)

上减去
SELECT sum(upvote) - sum(DownVote)
from Ratings 
WHERE TopicID = :topicsID

小提琴:http://sqlfiddle.com/#!9/b1644c/8

我认为一个具有布尔值的vote列就足够了。

因为True可以表示upvote,False可能表示DownVote

CREATE TABLE Ratings
(
    Vote BOOL
);
INSERT INTO Ratings VALUES 
(TRUE),
(TRUE),
(0),
(0),
(TRUE),
(TRUE),
(0);

SELECT sum(CASE WHEN Vote THEN 1 ELSE 0 END) - 
   sum(CASE WHEN Vote THEN 0 ELSE 1 END) as vote
from Ratings 
WHERE TopicID = :topicsID

小提琴:http://sqlfiddle.com/#!9/727c2b/3

答案 1 :(得分:0)

select COUNT(*) from ratings WHERE upvote=true AND TopicID = :topicsID ?