何时查找特定行数的计数差异的情况。

时间:2013-06-07 18:30:56

标签: sql

我有表格,看起来像这样

col1, col2
a,C
a,D
a,C
a,D 

我想知道col1 a 的内容是什么( C 的行数 - D的行数)。

如果我找到这两个数字,那将只是

SELECT COUNT(1) FROM mytable where COL1='a' and COL2='C'
SELECT COUNT(1) FROM mytable where COL1='a' and COL2='D'

然后我才能找到差异。

但是,我想用一个查询来完成它。所以我去了这个

SELECT COUNT(CASEWHEN(COL2)='D', 1, -1) 
FROM mytable 

但这似乎不起作用。有什么建议?

5 个答案:

答案 0 :(得分:3)

这是一种方式:

SELECT  SUM(CASE WHEN col2 = 'C' THEN 1 ELSE 0 END) Col2C,
        SUM(CASE WHEN col2 = 'D' THEN 1 ELSE 0 END) Col2D,
        SUM(CASE WHEN col2 = 'C' THEN 1 WHEN col2 = 'D' THEN -1 ELSE 0 END) [Col2C-Col2D]
FROM myTable
WHERE col1 = 'a'

答案 1 :(得分:1)

select SUM(CASE WHEN col2 = 'C' THEN 1 WHEN col2 = 'D' THEN -1 ELSE 0 END) as Diff
from mytable
where col1 = 'a'

答案 2 :(得分:0)

SELECT sum(CASE WHEN COL2='D' THEN 1 ELSE -1 END) as balance
FROM mytable 

答案 3 :(得分:0)

你走在正确的轨道上,这应该有效:

SELECT col1, SUM(CASE WHEN COL2 ='C' THEN 1 ELSE 0 END) - SUM(CASE WHEN COL2 ='D' THEN 1 ELSE 0 END)
FROM mytable 
GROUP BY col1

答案 4 :(得分:0)

感谢大家的快速回复。对我来说,以下代码片段有效。

SUM( CASEWHEN (COL2='D', 1, -1))

这是一个稍微全面的版本

SUM( CASE WHEN COL2='C' THEN -1 WHEN  COL2='D' THEN 1  ELSE 0 END)

我会推荐更全面的版本。