2013-05-03 93 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