Sql 计算值的类别

Sql 计算值的类别,sql,if-statement,count,distinct,Sql,If Statement,Count,Distinct,我在可空列中有int值v>=0,我想计算列中出现的Null、0、1和2+的次数如何有效地执行此操作?一种方法是分组方式: select (case when col in (0, 1) then cast(col as varchar(255)) else '2+' end) as grp, count(*) from t group by (case when col in (0, 1) then cast(col as varchar(255))

我在可空列中有
int
v>=0
,我想计算列中出现的Null、0、1和2+的次数如何有效地执行此操作?

一种方法是
分组方式

select (case when col in (0, 1) then cast(col as varchar(255))
             else '2+'
        end) as grp, count(*)
from t
group by (case when col in (0, 1) then cast(col as varchar(255))
               else '2+'
          end)
order by min(col);
cast()
的确切语法可能取决于数据库。这还假设所有值都是非负值

您也可以将计数放在不同的列中:

select sum(case when val = 0 then 1 else 0 end) as cnt_0,
       sum(case when val = 1 then 1 else 0 end) as cnt_1,
       sum(case when val >= 2 then 1 else 0 end) as cnt_2pl
from t;
sum(当val为NULL时为1,否则为0结束),因为cnt_NULL
丢失