sql - 如何使用基于 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;
解决方案
你想要一个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'
推荐阅读
- android - How to make the android.widget.Scroller stop scrolling at a specific item index?
- mongodb - MongoDB聚合错误返回错误结果
- arrays - 如果两个道具具有相同的字符串值,则反应渲染 DOM 元素
- visual-studio-code - VS Code 设置未正确打开
- java - 延迟生成僵尸?
- angular - 如何从 Firebase 发送带有过期代码(令牌)的电子邮件?
- css - 更改所有父元素的 css 位置,但负 css z-index 不能按预期工作
- python - 应用 'if' 条件比较两个 pandas 列并与第二列的值形成第三列
- python - TypeError 的迭代错误:'_io.TextIOWrapper' 对象不可调用
- laravel - 如何在 laravel 中创建中间件