使用 Null 进行 SQL 计数
Posted
技术标签:
【中文标题】使用 Null 进行 SQL 计数【英文标题】:TSQL Counting with Nulls 【发布时间】:2018-06-23 00:22:40 【问题描述】:我有一张表格,计算急诊科的入院和出院情况。这就是表格的样子
我正在尝试获取入院和出院的总数。像
录取 - 100 放电 - 200
有没有办法用 NULL 值做到这一点?
【问题讨论】:
这些值是否总是NULL
或1
?
【参考方案1】:
select
sum(case when Admitted is null then 0 else Admitted end) Admitted,
sum(case when DischargedFromED is null then 0 else DischargedFromED end) as DischargedFromED
from MyMagicalTable;
或
select
sum(coalesce(Admitted, 0)) Admitted,
sum(coalesce(DischargedFromED, 0)) DischargedFromED
from MyMagicalTable;
【讨论】:
【参考方案2】:只需使用sum()
;
select sum(admitted) as admitted, sum(DischargedFromED) as DischargedFromED
from t;
聚合函数忽略 NULL
值。
如果您担心NULL
值出现在sum()
之后,那么在之后使用coalesce()
:
select coalesce(sum(admitted), 0) as admitted,
coalesce(sum(DischargedFromED), 0) as DischargedFromED
from t;
以上假设列是数字的。如果它们是其他类型,则需要将它们转换为数字。
【讨论】:
COUNT(Admitted)
和 COUNT(DischargedFromED)
也可以工作,因为 COUNT(<expression>)
只计算非空值。
只有在知道至少有一个数字结果的情况下,使用 SUM 忽略 null 才是安全的。否则,SUM 返回 null,而不是 0,我认为这是他在特定用例中想要的。也可以将整个 SUM 包装在一个合并中。不管怎样,都应该处理。计数可能有效,但我不能 100% 确定他的列是 BIT 而不是 INT
@Josh 。 . . OPs 样本数据在两列中都有值,因此这实际上不是样本数据的问题。至于类型,第一句话说“我有一张桌子很重要”。 Bit
通常不被称为“计数”。但是,无论如何,这些通常都是合理的观点,所以我在答案中进行了详细说明。以上是关于使用 Null 进行 SQL 计数的主要内容,如果未能解决你的问题,请参考以下文章