You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双表统计职位申请数视图异常:无申请职位未显示(应显示0)

解决无申请记录职位不显示的问题

你碰到的核心问题是连接类型选错了——原语句里的JOIN是内连接(INNER JOIN),它只会返回两张表中能匹配上job_id的记录,没有申请的职位在application表中找不到对应条目,自然就被过滤掉了。

要让所有开放状态的职位都显示出来,哪怕申请数为0,我们需要改成左外连接(LEFT JOIN),以职位表作为主表,具体修改后的SQL如下:

SELECT 
    COUNT(a.job_id) AS "no. of applicants",
    p.job_id,
    p.status,
    p.JOB_TYPE,
    p.EMPLOYER_ID
FROM job p
LEFT JOIN application a ON a.job_id = p.job_id
WHERE p.status = 'OPEN'
GROUP BY p.job_id, p.status, p.JOB_TYPE, p.EMPLOYER_ID;

关键修改点解释:

  • 调整连接顺序与类型:把job表放在FROM后,用LEFT JOIN关联application。这样所有status='OPEN'的职位都会被保留,不管有没有对应的申请记录。
  • COUNT函数的作用:当没有匹配的申请时,a.job_id会是NULL,而COUNT()会自动忽略NULL值,返回0,正好满足你要显示申请数为0的需求。
  • GROUP BY保持不变:因为我们是按职位的唯一标识和相关属性分组,确保每个职位只返回一条统计结果。

如果你的数据库对GROUP BY有严格要求(比如MySQL开启了ONLY_FULL_GROUP_BY模式),当前的GROUP BY子句已经包含了所有非聚合字段,完全符合规范。

内容的提问来源于stack exchange,提问作者Sam Turner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:32:23