sql count / group by / zero

时间:2014-12-04 02:54:22

标签: sql count

是的,那里肯定有几十个类似的问题我已经尝试了20或30个排列,但我仍然难过。这是最简单的缩减:

select MyMethodNbr, count(*) from MyDB 
where MyMethodNbr in (33, 57, 150, 160, 200, 240)
group by MyMethodNbr 
order by MyMethodNbr ASC

表中不存在MyMethodNbr列表中的某些项目,但我想将空值转换为零。我只能获得一个非零计数表。

2 个答案:

答案 0 :(得分:1)

您可以使用left join执行此操作。这是典型的语法:

select n.n as MyMethodNbr, count(MyDB.MyMethodNbr) as num
from (select 33 as n union all select 57 union all select 150 union all select 160 union all
      select 200 union all select 240
     ) n left join
     MyDB 
     on MyDB.MyMethodNbr = n.n
group by n.n 
order by num ASC;

在某些数据库中,您需要from dual或类似的构造来创建数字列表。

答案 1 :(得分:-1)

select ISNULL(MyMethodNbr,0), count(*) from MyDB 
where MyMethodNbr in (33, 57, 150, 160, 200, 240)
group by MyMethodNbr 
order by MyMethodNbr ASC