MySQL中Group By与Count查询问题:求修正错误SQL统计机构数
问题分析与SQL修正
原SQL的问题
- 分组逻辑偏离需求:原SQL按
G.fac(院系)和L.org(机构)分组,这是在统计「每个机构下每个院系的关联记录数」,完全不符合我们需要的「统计每个教师的授课院系数量」的目标。 - 聚合统计对象错误:
HAVING COUNT(G.fac) > 1在错误分组下,统计的是当前组内的记录条数,而非单个教师的授课院系数量。
修正思路
- 先统计每个教师(
KL)对应的授课院系(fac)数量,筛选出院系数量超过1的教师; - 将这些符合条件的教师关联到教师表(
L),获取他们所属的机构; - 统计这些机构的唯一总数(避免同一机构有多个符合条件的教师时重复计数)。
修正后的SQL
SELECT COUNT(DISTINCT L.org) AS org_count FROM L JOIN ( -- 子查询:筛选出授课院系数量>1的教师ID SELECT R.KL FROM R JOIN G ON R.KG = G.KG GROUP BY R.KL HAVING COUNT(DISTINCT G.fac) > 1 ) AS qualified_teachers ON L.KL = qualified_teachers.KL;
逻辑说明
- 子查询
qualified_teachers:通过关联R表和G表,按教师ID分组,用COUNT(DISTINCT G.fac)统计每个教师的授课院系数量,筛选出数量超过1的教师ID; - 外层查询:将筛选出的教师关联到
L表,用COUNT(DISTINCT L.org)统计这些教师所属的唯一机构总数,确保同一机构只被计数一次。
执行该SQL会得到预期结果1,完全匹配需求。
内容的提问来源于stack exchange,提问作者Ростислав Романець
相关产品推荐
相关产品推荐

