sql-如何在结果集中为列表中的所有值返回计数值

qjp7pelc  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(301)

这是我正在做的工作的简化版本,我得到了以下代码:
'代码1'
'代码2'
'代码3'
我被要求找出我们数据库中每一个代码都有多少个案例。
这些代码都可以在casegroup表中找到,还有许多其他代码,但我只需要知道上面代码的编号。
我正在使用的当前sql:

SELECT 
    cg.code_typ as [code type]
    ,COUNT(*) as [Total] -- 62637
FROM 
    CaseGroup cg
WHERE 
    cg.code_typ IN ('code1', 'code2', 'code3')
GROUP BY
    cg.code_typ

我的问题是,如果代码类型的计数为0,则会从结果集中跳过该代码类型。我想一个结果集,其中列出了所有三个代码,即使计数是0。所以理想的情况是这样的:

CodeType    | Num of cases
code1       | 1 
code2       | 0 (or blank)
code3       | 3

我目前收到的结果如下:

CodeType    | Num of cases
code1       | 1 
code3       | 3

实际上,我已经得到了大约100种不同的代码类型,表中有150多种不同的代码类型和超过100万个案例,这就是为什么从结果集中跳过代码类型会让人非常沮丧的原因。
我尝试过将不同的代码添加到temp表中,然后将temp表连接到查询中,但似乎仍然无法得到所需的结果。我相信有一个简单的解决办法,如果有人能提供它,将不胜感激。
如果有任何额外的信息,我可以提供或更好的标题这个问题,请让我知道:)

uajslkp6

uajslkp61#

你可以使用 left join --在构建了一个你真正想要的所有代码的列表之后。

SELECT c.code_typ as [code type],
       COUNT(cg.code_typ) as [Total] -- 62637
FROM (SELECT 'code1' as code_typ UNION ALL
      SELECT 'code2' as code_typ UNION ALL
      SELECT 'code3' as code_typ
     ) c LEFT JOIN
     CaseGroup cg
     ON cg.code_typ = c.code_typ
GROUP BY c.code_typ;

这使用了 UNION ALL ,并非所有数据库都支持。但是类似的东西可以用在你正在使用的任何数据库中。

相关问题