首页 > 解决方案 > 如何使用基于 2 个表的计数

问题描述

我有一个列出工作的表和另一个列出工作申请的表。我想创建一个视图,在其中列出作业表中的所有作业详细信息,并有一列计算该作业的申请数量。

到目前为止,我已经完成了上述工作。问题是没有应用程序的工作根本不会出现,而它们应该只出现计数为 0。这可能是因为没有申请人的工作不会在应用程序表中列出任何 job_id。

select count(a.job_id) "no. of applicants",
       p.job_id,  
       p.status,
       p.JOB_TYPE,
       p.EMPLOYER_ID,
from application a 
join job p 
on a.job_id=p.job_id 
where p.status='OPEN' 
group by p.job_id, 
       p.status,
       p.JOB_TYPE,
       p.EMPLOYER_ID;

标签: sqloracle

解决方案


你想要一个left join,所以你保留所有符合where条件的工作:

select j.job_id, j.status, j.JOB_TYPE, j.EMPLOYER_ID,
       count(a.job_id) as num_applicants
from job j left join
     application a 
     on a.job_id = j.job_id 
where j.status = 'OPEN' 
group by j.job_id, j.status, j.JOB_TYPE, j.EMPLOYER_ID;

也就是说,您可能会发现相关子查询更容易表达逻辑:

select j.*
       (select count(*)
        from application a
        where a.job_id = j.job_id
       ) as num_applications
from job j
where j.status = 'OPEN'

推荐阅读