1

这是示例表:

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 子句中包含不满足条件的行。

我能做到这一点吗?

4

2 回答 2

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 ║
╚═══╩════════════╝
于 2013-05-03T09:48:13.713 回答
1

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

Select A,count(case when Column1 > 3 then 1 else null end) as C from myTable group by A
于 2013-05-03T09:48:50.247 回答