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

如何基于互相关联的QC_Meeting_Master表统计QC_Project_Master表的Problem_ID数量

解决按Problems_ID分组统计对应Project记录数的问题

看起来你需要的是分别统计QC_Meeting_Master中每个Problems_ID在QC_Project_Master里对应的记录数量,而不是把所有符合条件的记录数加起来。你的原SQL语句因为缺少分组逻辑,而且子查询里做了不必要的关联,所以没法得到预期的分ID统计结果,我来给你修正一下:

方法一:使用LEFT JOIN + GROUP BY(推荐)

这种方法通过关联两张表,再按Problems_ID分组统计,能直接得到每个ID对应的数量:

SELECT 
    QMM.Problems_ID,
    COUNT(QPM.Problem_ID) AS Problem_Count
FROM QC_Meeting_Master QMM
LEFT JOIN QC_Project_Master QPM 
    ON QMM.Problems_ID = QPM.Problem_ID
GROUP BY QMM.Problems_ID;

执行这个语句后,你会得到如下结果:

Problems_IDProblem_Count
23
74

完全符合你的预期需求。这里用LEFT JOIN是为了确保即使某个Problems_ID在QC_Project_Master里没有对应记录,也会显示为0,而不是被过滤掉。

方法二:使用关联子查询

如果觉得join的写法不够直观,也可以用子查询来实现,每个Problems_ID单独统计对应数量:

SELECT 
    Problems_ID,
    (SELECT COUNT(*) 
     FROM QC_Project_Master 
     WHERE Problem_ID = QMM.Problems_ID) AS Problem_Count
FROM QC_Meeting_Master QMM;

这个语句的逻辑更直白:遍历QC_Meeting_Master的每一行,对当前的Problems_ID,去QC_Project_Master里统计匹配的记录数,结果和上面的方法完全一致。

原SQL的问题分析

你的原语句select COUNT(Problem_ID) from [QC_Project_Master] where Problem_ID in (select Problems_ID from QC_Meeting_Master QMM join QC_Project_Master QPM on QMM.Problems_ID = QPM.Problem_ID)有两个问题:

  1. 没有分组:只会返回所有符合条件的记录总数(3+4=7),而不是按每个Problems_ID分开的统计结果;
  2. 子查询冗余:子查询里的join完全没必要,直接select Problems_ID from QC_Meeting_Master就足够获取需要的ID列表了,但即使修正了这一点,还是解决不了分组统计的核心需求。

内容的提问来源于stack exchange,提问作者Nits Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:23