2011-01-26 90 views
1

如何将以下两个查询合并为一个,将result作为两个计数的差值。或者结果是:如何将两个COUNT()语句合并为一个并获得差异?

result = vote1 - vote2

SELECT COUNT(id) AS vote1 FROM votes WHERE votes.voteTypeId = @voteType1 AND votes.userId = @userId 
SELECT COUNT(id) AS vote2 FROM votes WHERE votes.voteTypeId = @voteType2 AND votes.userId = @userId 

回答

3
SELECT SUM(votetypeid = @votetype1) - SUM(votetypeid = @votetype2) 
FROM votes 
WHERE userid = @userid 
     AND votetypeid IN (@votetype1, @votetype2) 
+0

油滑。我喜欢用布尔逻辑和整数运算之间的交集。 – chaos 2011-01-26 19:02:38

1
select sum(case when voteTypeId = @voteType1 then 1 
       when voteTypeId = @voteType2 then -1 
       else 0 
      end) as result 
    from votes 
    where userId = @userId