2013-05-03 94 views
1

下面是示例表:Select count(*)不会返回SQLite中结果为0的行吗?

A  |  Column1  |  Column2 
1    5     8 
1    3     2 
2    6     9 
2    2     5 
3    1     3 

这里是我的查询:

Select A,count(*) as C from myTable where Column1 > 3 group by A 

结果应该是:

A  |  C 
1   1 
2   1 
3   0 

但它给了我这个结果是排除了所有0行:

A  |  C 
1   1 
2   1 

我想要包含where条款中不符合条件的行。

我可以做到这一点吗?

回答

2

WHERE子句导致A = 3不在列表中,因为它在记录聚合之前过滤行。

SELECT A, 
     COUNT(CASE WHEN Column1 > 3 THEN 1 END) TotalCount 
FROM myTable 
GROUP BY A 

输出

╔═══╦════════════╗ 
║ A ║ TotalCount ║ 
╠═══╬════════════╣ 
║ 1 ║   1 ║ 
║ 2 ║   1 ║ 
║ 3 ║   0 ║ 
╚═══╩════════════╝ 
1

你的where子句消除它们。尝试类似:

Select A,count(case when Column1 > 3 then 1 else null end) as C from myTable group by A