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

SQL子查询列过多错误排查:筛选候选人数≥50的学校并获取候选人姓名

问题解决:SQL子查询列数过多错误

错误原因

你写的IN子查询返回了candidate_id、school_name、count(e.school_name)三列,但IN操作符要求子查询只能返回单列,这直接导致了报错。另外你的分组逻辑也不符合需求——按candidate_id和school_name分组,统计的是单个候选人在同一学校的就读次数,而非学校的总候选人数。

正确SQL写法

我们需要先筛选出有50名及以上候选人就读的学校,再关联获取对应候选人的姓名,以下是两种可行方案:

方案1:使用JOIN(推荐,性能更优)

SELECT c.first_name, c.last_name
FROM candidates c
JOIN educations e ON c.id = e.candidate_id
JOIN (
    -- 先统计出符合人数要求的学校
    SELECT school_name
    FROM educations
    GROUP BY school_name
    -- 用DISTINCT确保同一候选人多次就读同一学校时只算一次
    HAVING COUNT(DISTINCT candidate_id) >= 50
) AS popular_schools ON e.school_name = popular_schools.school_name;

方案2:使用嵌套IN子查询

SELECT first_name, last_name
FROM candidates
WHERE id IN (
    SELECT candidate_id
    FROM educations
    WHERE school_name IN (
        -- 先筛选出符合人数要求的学校
        SELECT school_name
        FROM educations
        GROUP BY school_name
        HAVING COUNT(DISTINCT candidate_id) >= 50
    )
);

补充说明

  • 如果你的业务场景中,每个候选人在同一学校只会有一条记录,也可以把COUNT(DISTINCT candidate_id)替换为COUNT(*),但保留DISTINCT能避免数据异常导致的统计错误,更严谨。

内容的提问来源于stack exchange,提问作者nick lanta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:55:35