在计数sql中包含0

在计数sql中包含0,sql,count,db2,Sql,Count,Db2,假设我有这张桌子: |MY_TABLE| | ID_COL | | 1 | | 1 | | 2 | | 2 | 现在我想对这个表执行一个计数查询,该查询将包含零个结果。 当我尝试运行查询时: Select ID_COL,count(ID_COL) from MY_TABLE where ID_COL = '1' or ID_COL = '2' or ID_COL = '100' group by ID_COL 结果将只有两行。我想为ID\u C

假设我有这张桌子:

|MY_TABLE|
| ID_COL |
|   1    |
|   1    |
|   2    |
|   2    |
现在我想对这个表执行一个计数查询,该查询将包含零个结果。 当我尝试运行查询时:

Select ID_COL,count(ID_COL) 
from   MY_TABLE 
where ID_COL = '1' or ID_COL = '2' or ID_COL = '100' group by ID_COL
结果将只有两行。我想为ID\u COL='100'显示0。 有办法做到这一点吗

谢谢


顺便说一句,我正在使用DB2。

您必须动态创建一个表,以包含每个ID的记录:

select 1 as id_col union all select 2 union all select 100;
然后,您可以从此表中选择ID并显示计数:

select all_ids.id_col, count(my_table.id_col)
from (select 1 as id_col union all select 2 union all select 3) all_ids
left join my_table on my_table.id_col = all_ids.id_col
group by all_ids.id_col;
编辑:现在您已经用DB2标记了您的请求:DB2需要一个虚拟表来从中选择一个值。而不是
select1
必须从sysibm.sysdummy1中编写
select1。完整查询:

select all_ids.id_col, count(my_table.id_col)
from 
(
  select 1 as id_col from sysibm.sysdummy1
  union all 
  select 2 from sysibm.sysdummy1
  union all 
  select 3 from sysibm.sysdummy1
) all_ids
left join my_table on my_table.id_col = all_ids.id_col
group by all_ids.id_col;

您应该始终添加一个标记来命名您的dbms(MySQL、Oracle或SQL Server等)。感谢您的提醒@ThorstenKettner。请注意,ID_COL=100的COUNT()不是零;相反,它不存在。如果找不到3,则查询仍将返回1,因为它存在于所有查询中_ids@ah_hau你说得对。我来编辑。我必须使用COUNT(my_table.id_col)从计数中排除不匹配项,而不是COUNT(*)。谢谢